在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。
一流程控制语句分类
- 顺序结构
- 判断和选择结构(if, switch)
- 循环结构(for, while, do…while)
1顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
顺序结构执行流程图:
2判断语句 :if判断
2.1 if语句格式1
格式:
if (关系表达式) {
语句体;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体
- 如果关系表达式的值为false就不执行语句体
- 继续执行后面的语句内容
public class Demo {
public static void main(String[] args) {
//定义两个变量
int a = 10;
int b = 20;
//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
if(a == b) {
System.out.println("a等于b");
}
//需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
int c = 10;
if(a == c) {
System.out.println("a等于c");
}
}
}
2.2 if语句格式2
格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体1
- 如果关系表达式的值为false就执行语句体2
- 继续执行后面的语句内容
public class Demo {
public static void main(String[] args) {
//定义两个变量
int a = 10;
int b = 20;
//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
if(a > b) {
System.out.println("a的值大于b");
} else {
System.out.println("a的值不大于b");
}
}
}
2.3 if语句格式3
格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
执行流程:
- 首先计算关系表达式1的值
- 如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
- 如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
- …
- 如果没有任何关系表达式为true,就执行语句体n+1。
案例
小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,
假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
//90~100 自行车一辆
//80~90 游乐场玩一天
//70 ~ 80 变形金刚一个
//70 以下 胖揍一顿
public class Demo{
public static void mian(String[] args){
//1.键盘录入一个值表示小明的分数
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的成绩");
int score = sc.nextInt();
//2.对分数的有效性进行判断
if(score >= 0 && score <= 100){
//有效的分数
//3.对小明的分数进行判断,不同情况执行不同的代码
if(score >= 90 && score <= 100){
System.out.println("送自行车一辆");
}else if(score >= 80 && score <= 90){
System.out.println("游乐场玩一天");
}else if(score >= 70 && score <= 80){
System.out.println("变形金刚一个");
}else{
System.out.println("胖揍一顿");
}
}else{
//无效的分数
System.out.println("分数不合法");
}
}
}
}
2.4 switch语句
格式
switch (表达式) {
case 1:
语句体1;
break;
case 2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
-
首先计算出表达式的值
-
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
-
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
import java.util.Scanner;
public class Demo{
public static void main(String[] args){
//1.键盘录入星期
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期");
int week = sc.nextInt();
//2.书写一个switch语句去跟week进行匹配
switch (week) {
case '周一':
case '周二':
System.out.println('学习理论知识');
break;
case '周三':
case '周四':
System.out.println('到企业实践');
break;
case '周五':
System.out.println('总结经验');
break;
case '周六':
case '周日':
System.out.println('休息娱乐');
break;
} */
}
}
switch的扩展知识:
-
default的位置和省略情况
default可以放在任意位置,也可以省略
-
case穿透
不写break会引发case穿透现象