本文目录
第3章 程序流程
控制流程(也称为流程控制)是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。
- 顺序
- 条件
- 循环
- 转向
- 异常
1. 条件
1.1 if…else…
1.1.1 if 语句
if 语句是单条件分支语句,即根据一个条件来控制程序执行的流程。
语法格式:
if(条件表达式){
// 条件满足时执行
}
根据 if 的计算结果(true or false),JVM决定是否执行 if 语句块(即花括号{}包含的所有语句)。
1.1.2 if-else 语句
if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。
语法格式:
if(条件表达式){
// 条件满足时执行
} else {
// 条件不满足时执行
}
1.1.3 if-else if-else 语句
if-else if-else 语句是多条件分支语句,即根据多个条件来控制程序执行的流程
语法格式:
if(条件1表达式){
// 条件1满足时执行
} else if(条件2表达式){
// 条件2满足时执行
}
...
else {
// 所有条件均不满足时
}
1.2 switch(开关语句)
switch 语句是单条件多分支的开关语句。
一般语法格式如下:
switch(条件表达式){
case value1 :
//语句
break; //可选
case value2 :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
规则:
-
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
-
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
-
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
-
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
-
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不一定要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
-
switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
2. 循环
循环结构:循环条件 + 循环体
2.1 while 循环
先判断循环条件,再执行循环体。
语法格式:
while(条件表达式) {
// 循环体,条件满足时执行
}
最少执行 0 次循环,也就是不进入循环体中。
2.2 do…while 循环
先执行循环体,再判断循环条件。
语法格式:
do {
// 循环体
}while(条件表达式);
最少执行 1 次循环。
2.3 for 循环
语法格式:
for(初始化; 条件表达式; 更新) {
// 循环体
}
说明:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测条件表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测条件表达式。循环执行上面的过程。
2.4 foreach 增强循环
该循环一般用来循环数组和集合。
语法格式:
for(类型 变量 : 数组名/集合名) {
// 循环体
}
2.5 转向语句
2.5.1 break
立即终止循环。
2.5.2 continue
立即终止当前循环,直接进入下一次循环。
2.5.3 return
跳出循环及所包含的函数体。
2.6 循环应用
1.求累加和:1+2+3+…+100
/**
* 循环练习:
* 1.求累加和:1+2+3+...+100
*
* @author: SuMo
*/
public class Practice_01_circulation {
public static void main(String[] args) {
// while 循环实现
int i = 1;
int sum = 0;
while (i < 101) {
sum += i;
i++;
}
System.out.println("sum = " + sum);
System.out.println();
// do...while 循环实现
int j = 1;
sum = 0;
do {
sum += j;
j++;
} while (j < 101);
System.out.println("sum = " + sum);
System.out.println();
// for 循环实现
sum = 0;
for (int k = 0; k < 101; k++){
sum += k;
}
System.out.println("sum = " + sum);
}
}
2.计数器:统计1~100之间的偶数个数,并将偶数的和加起来(累加)
/**
* 循环练习:
* 2.计数器:统计1~100之间的偶数个数,并将偶数的和加起来(累加)
*
* @author: SuMo
*/
public class Practice_02_circulation {
public static void main(String[] args) {
// for 循环
int count = 0; // 计数器
int sum = 0; // 所有偶数的和
for (int i = 1; i <= 100; i++) {
if((i % 2) == 0) { // 偶数 % 2 == 0
count++;
sum += i;
}
}
System.out.println("1~100之间共有" + count + "个偶数,其所有偶数之和为:" + sum);
System.out.println();
// while 循环
int j = 1;
count = 0;
sum = 0;
while (j <= 100) {
if ((j % 2 ) == 0) {
count++;
sum += j;
}
j++;
}
System.out.println("1~100之间共有" + count + "个偶数,其所有偶数之和为:" + sum);
System.out.println();
// do...while 循环
int k = 1;
count = 0;
sum = 0;
do {
if ((k % 2) == 0) {
count++;
sum += k;
}
k++;
} while (k <= 100);
System.out.println("1~100之间共有" + count + "个偶数,其所有偶数之和为:" + sum);
}
}
3.循环录入一名同学的5个科目的平时成绩,并计算总分和平均分
/**
* 循环案例:
* 1.循环录入一名同学的5个科目的平时成绩,并计算总分和平均分
*
* @author: SuMo
*/
public class Practice_03_circulation {
public static void main(String[] args) {
// 录入成绩
int score = 0; // 记录从键盘输入的成绩
int sum = 0; // 总成绩
int avg = 0; // 平均分
for (int i = 0; i < 5; i++) {
System.out.println("请输入第" + (i + 1) + "门成绩:");
Scanner input = new Scanner(System.in);
score = input.nextInt();
sum += score;
}
avg = sum / 5;
System.out.println("该同学的总分:" + sum + ", 平均分:" + avg);
}
}
4.任意输入一个值,输出该值的加法组成
- 例如:6 0+6=6;1+5=6;2+4=6;…;6+0=6
/**
* 循环案例:
* 2.任意输入一个值,输出该值的加法组成
* 例如:6 0+6=6;1+5=6;2+4=6;...;6+0=6
*
* @author: SuMo
*/
public class Practice_04_circulation {
public static void main(String[] args) {
// 录入数字
System.out.println("请输入一个数值:");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
System.out.println("该数值:" + num + "的加法组成为:");
for (int i = 0, j = num; i <= num; i++, j--) {
System.out.println(i + "+" + j + "=" + (i + j));
}
}
}
认真、沉着做事,每天进步一小点!!!