目录
- 程序流程控制
- 顺序结构
- 分支结构
- if分支语句
- 案例:
- switch分支
- 案例:
- 循环结构
- for循环
- while循环
- do-while循环
- 跳转控制语句
程序流程控制
顺序结构
没什么好说的就是:程序默认执行流程(如下)
public class Test {
public static void main(String[] args) {
System.out.println("A");
System.out.println("B");
System.out.println("C");
}
}
分支结构
分支语句,它通过对给定的条件进行判断,从而决定执行两个或多个分支中的哪一支。因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定当判断结果为“真”或“假”时应分别执行什么样的操作/算法。在 Java 语言中选择语句主要提供了两个,一个是 if 语句,另一个则是 switch 语句。
if分支语句
根据判定的结果(真或假)决定执行某个分支的代码
If分支有三种格式
格式1:
if (条件表达式) {
语句体;
}
执行流程
- 首先判断条件表达式的结果,如果为true执行语句体,为 false 就不执行语句体。
注意:
- if 语句中,如果大括号控制的只有一行代码,则大括号可以省略不写。
格式2:
if (条件表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
- 首先判断条件表达式的结果,如果为true执行语句体1,为 false 就执行语句体2。
格式3:
if (条件表达式1) {
语句体1;
} else if (条件表达式2) {
语句体2;
} else if (条件表达式3) {
语句体3;
}
. . .
else {
语句体n+1;
}
执行流程:
- 先判断条件1的值,如果为true则执行语句体1,分支结束;如果为false则判断条件2的值
- 如果值为true就执行语句体2,分支结束;如果为false则判断条件3的值
- …
- 如果没有任何条件为true,就执行else分支的语句体n+1。
案例:
需求:键盘接收一个学生的成绩,范围在[0-100],根据成绩判断等级,[90-100]等级为“优秀”,[80-90)等级为“良好”,[70-80)等级为“中等”,[60-70)等级为“及格”,[0-60)等级为“不及格”,输入其它数字表示成绩不合法。
Scanner scan = new java.util.Scanner(System.in);
System.out.print("输入考试成绩:");
int score = scan.nextInt();
String grade = "不及格";
if(score < 0 || score > 100){
grade = "对不起,您输入的成绩不合法!";
}else if(score >= 90){
grade = "优秀";
}else if(score >= 80){
grade = "良好";
}else if(score >= 70){
grade = "中等";
}else if(score >= 60){
grade = "及格";
}
System.out.println("成绩等级:" + grade);
switch分支
匹配条件去执行分支, 适合做值匹配的分支选择,结构清晰,格式良好
switch(表达式){
case 值1:
执行代码...;
break;
case 值2:
执行代码...;
break;
…
case 值n-1:
执行代码...;
break;
default:
执行代码n;
}
执行流程:
- 先执行表达式的值,拿着这个值去与case后的值进行匹配。
- 匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。
- 如果case后的值都不匹配则执行default代码。
注:
-
if其实在功能上远远强大于switch。
-
if适合做区间匹配。
-
switch适合做:值匹配的分支选择、代码优雅。
-
表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
-
case给出的值不允许重复,且只能是字面量,不能是变量。
-
不要忘记写break,否则会出现穿透现象。
案例:
需求:键盘接收一个学生的成绩,范围在[0-100],根据成绩判断等级,[90-100]等级为“优秀”,[80-90)等级为“良好”,[70-80)等级为“中等”,[60-70)等级为“及格”,[0-60)等级为“不及格”,输入其它数字表示成绩不合法。
Scanner scan = new Scanner(System.in);
System.out.print("请输入考试成绩[0-100]:");
double score = scan.nextDouble();
String grade = "不及格";
switch((int)(score / 10)){
case 10: case 9:
grade = "优秀";
break;
case 8:
grade = "良好";
break;
case 7:
grade = "中等";
break;
case 6:
grade = "及格";
break;
}
System.out.println("成绩等级为:" + grade);
循环结构
for循环
- 控制一段代码反复执行很多次。
格式:
for (初始化语句; 循环条件; 迭代语句) {
循环体语句(重复执行的代码);
}
// 输出3次HelloWorld
for (int i = 0; i < 3; i++) {
System.out.println("Hello World");
}
执行的流程:
- 循环一开始,执行int i = 0 一次。
- 然后判断循环条件:0 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=1了。
- 然后判断循环条件:1 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=2了。
- 然后判断循环条件:2 < 3 返回true ,进入到循环体中执行输出 :helloWorld, 然后执行迭代语句i++ , 此时i=3了。
- 然后判断循环条件:3 < 3 返回false, 循环立即结束!!
while循环
格式
初始化语句;
while (循环条件) { 循环体语句(被重复执行的代码);
迭代语句;
}
int i = 0;
while (i < 3) {
System.out.println("Hello World");
i++;
}
do-while循环
- 先执行再判断循环条件。
初始化语句;
do {
循环体语句;
迭代语句;
} while (循环条件);
int i = 0;
do {
System.out.println(“Hello World!");
i++;
} while( i < 3);
do-while循环的特点:一定会先执行一次循环体。
跳转控制语句
- break : 跳出并结束当前所在循环的执行。
- continue: 用于跳出当前循环的当次执行,进入下一次循环。
注:
break : 只能用于结束所在循环, 或者结束所在switch分支的执行。
continue : 只能在循环中进行使用。