流程控制语句(if,switch)

本文最后更新于:1 年前

十四、流程控制语句-if

在程序中我们需用去判断不同的情况做不同的处理,这个时候就需要使用到流程控制语句来处理。我们先来学习最常用的流程控制语句if。

1. 格式

if语句其实有三种部分组成的

三个部分:
①if部分

​ if(判断表达式){
​ 语句体;
​ }
​ ② else if部分

​ else if(判断表达式){
​ 语句体;
​ }
​ ③else部分

​ else{
​ 语句体;
​ }

一个完整的if语句,首先在最前面有且仅有一个if部分,后面会有0个到多个else if语句,最后会有0个或1个else

例如:

1
2
3
if(判断表达式1){
语句体1;
}
1
2
3
4
5
if(判断表达式1){
语句体1;
}else if(判断表达式2){
语句体2;
}
1
2
3
4
5
6
7
if(判断表达式1){
语句体1;
}else if(判断表达式2){
语句体2;
}else if(判断表达式3){
语句体3;
}
1
2
3
4
5
6
7
8
9
10
11
if(判断表达式1){
语句体1;
}else if(判断表达式2){
语句体2;
}else if(判断表达式3){
语句体3;
}else if(判断表达式4){
语句体4;
}else{
语句体n+1;
}
1
2
3
4
5
if(判断表达式1){
语句体1;
}else{
语句体n+1;
}

2. 执行流程

​ 从上到下依次执行判断表达式
​ 结果为true:则执行后面紧跟着的语句体.语句体执行完了整个if语句就结束了.
​ 结果为false:则继续判断下面一个判断表达式
​ 如果所有判断表达式的结果都为false,在有else语句的情况下就执行else里面的语句体,没有的话if语句结束.

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
//输入年龄 判断是否能够进入网吧
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的年龄");
int age = sc.nextInt();
//判断age>=18
if(age>=18){
System.out.println("可以进入网吧");
}else{
System.out.println("未成年不能进入网吧");
}

}

3. 注意

​ ①一旦执行了一个大括号中的语句体,整个if语句就结束了.不可能出现执行两个语句体的情况.
②如果大括号中的语句体只有一行代码的时候可以把大括号省略.但是建议永远不要省略

世界上最遥远的距离就是你在if里,我在else里,似乎一直相伴,却永远无法结伴而行.

4. 练习

1.判断下面代码的输出结果

1
2
3
4
5
6
7
8
9
10
int a=10;
int b=20;
if(a>5){
System.out.print(1);
}else if(b>10){
System.out.print(2);
}else{
System.out.print(3);
}
System.out.print(4);

2.判断下面代码的输出结果 1 5 9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int a=10;
int b=20;
if(a>1){
System.out.print(1);
if(b>22){
System.out.print(4);
}else if(a>3){
System.out.print(5);
}

if(a>20){
System.out.print(8);
}else{
System.out.print(9);
}
}else if(a>9){
System.out.print(2);
if(b>10){
System.out.print(6);
}else if(a>3){
System.out.print(7);
}
}else if(b>2){
System.out.print(3);
}

3.按照要求编写代码

让用户键盘录入语文,英语,数学的考试成绩。如果总分小于180分要求输出:由于你的优秀,我想和你家长聊聊。

4.按照要求编写代码

让用户键盘录入语文,英语,数学的考试成绩。如果总分小于180分要求输出:由于你的优秀,我想和你家长聊聊。否则就输出:同九义,何汝秀

5.按照要求编写代码

让用户键盘录入语文,英语,数学的考试成绩。

​ 满足不同的条件输出不同的内容(要求只能输出一种)

条件 输出内容
总分<180 叫家长
总分>=180并且语数外分数都大于98分 恭喜升任五道杠大队长
总分>=180但是做不了五道杠的情况下如果语数外分数都大于95分 恭喜升任班长
总分>=180即做不了五道杠也做不了班长的情况下 同九义,何汝秀

6.下面代码的执行结果是什么?

1
2
3
4
5
6
7
8
int a=10;
int b;
if(a%2==0){
b=0;
}else if(a%2==1){
b=1;
}
System.out.println(b);

答案: 会在编译的时候报错.因为在编译的时候编译器看到了if…else if语句.它认为有可能两个判断都不成立.这样的话b就可能出现没有赋值直接使用的情况.

十五、流程控制语句-switch

使用switch也可以根据判断不同的情况做不同的处理。

1. 格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch (表达式) {
case1:
语句体1;
break;
case2:
语句体2;
break;
case3:
语句体3;
break;
...
default:
语句体n+1;
break; // 最后一个break语句可以省略,但是推荐不要省略
}

switch后面小括号当中只能是下列数据类型:
基本数据类型:byte/short/char/int
引用数据类型:String字符串、enum枚举

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args) {
int num = 3;
switch (num){
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
case 3:
System.out.println(3);
//break;
default:
System.out.println("default");
break;
}

}

2. 执行流程

​ 从上到下依次看表达式的结果和哪个case后面的值相同,相同就执行那个case后面的语句体,碰到break就结束switch.
​ 如果没有符合要求的case则执行default后面的语句体.

3. 注意事项

​ ①switch可以没有default,但是一般都会加上
​ ②case语句后面可以不加break.但是如果不加break就可能会出现case穿透问题.匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整个switch结束为止;

4. 小思考

switch和if都可以做多种情况的判断,那他们之间有什么区别呢?你觉得谁更灵活?

tips:可以从他们小括号里能写的表达式的类型方面去考虑
if的小括号中是布尔表达式,switch是byte,short…

答案:

if的表达式的布尔表达式,可以进行更复杂条件的判断(例如:值在某个范围内,多个条件同时符合等)而switch的表达式的数据类型只能适合做有限个数的等值判断。所以如果是有限个数的等值判断的话switch有的时候会更方便。其他情况下if会更适合。

5. 练习

1.键盘输入0-6之间的整数,分别代表每周的星期日、星期一、

…、星期六在控制台进行输出。如果用户输入了0-6之外的数提示:请输入0-6之间的整数。

2.一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。

春:3、4、5
夏:6、7、8
秋:9、10、11
冬:1、2、12


流程控制语句(if,switch)
http://example.com/2020/02/01/流程控制语句(if-switch)/
作者
Crush
发布于
2020年2月1日
更新于
2023年7月9日
许可协议