选择结构与分支结构
选择结构与分支结构
- 选择结构概念:根据已知条件进行逻辑判断,满足条件后执行相应的操作。
一、基本if选择判断
语法
1
2
3
4if(布尔表达式){
//代码块
}
//后续代码...执行流程
- 对布尔表达式进行判断。
- 结果为
true
,则先执行代码块,在执行后续代码。 - 结果为
false
,则跳过代码块,直接执行后续代码。
案例1:
1 | public class TestBasicIf{ |
运行结果:
由于3>4
表达式结果为false
,if内语句则为执行,执行后续代码,因此输出结果为程序结束
。
案例2:
1 | public class TestBasisIf{ |
运行结果:
由于score=97.2
大于90
,所以表达式score>=90.0
的结果为true
,进入执行if内代码,执行完后再执行后续代码,所以输出结果为恭喜你,你的成绩优秀 程序结束
。
二、if else选择结构
语法
1
2
3
4
5
6if(布尔表达式){
//代码块1
}else{
//代码块2
}
//后续代码执行流程
- 对布尔表达式进行判断。
- 结果为
true
,则先执行代码块1,再退出整个结构,执行后续代码。 - 结果为
false
,则先执行代码块2,再退出整个结构,执行后续代码。
两个代码块互斥,总有一个会被执行到。
案例:
1 | public class TestIfElse{ |
运行结果:
由于score=99.0
不等于100
,所以表达式score==100
结果为false
,则执行else中的代码块2,所以输出结果为很遗憾,没有满分 程序结束
。
三、多重if选择结构
语法
1
2
3
4
5
6
7
8
9if(布尔表达式1){
//代码块1
}else if(布尔表达式2){
//代码块2
}else if(布尔表达式3){
//代码块3
}else{
//代码块4
}执行流程
- 表达式1为
true
,则执行代码块1,再退出整个结构,执行后续代码。 - 表达式为2
true
,则执行代码块2,再退出整个结构,执行后续代码。 - 表达式为3
true
,则执行代码块3,再退出整个结构,执行后续代码。 - 以上均为
false
,则执行代码块4,再退出整个结构,执行后续代码。
注意:相互排斥,有一个为
ture
,其他均不在执行,适用于区间判断。- 表达式1为
案例:
1 | public class TestMultipleIf{ |
运行结果:
三、嵌套if选择结构
语法
1
2
3
4
5
6
7
8
9if(外层表达式){
if(内层表达式){
//内层代码块1
}else{
//内层代码块2
}
}else{
//外层代码块
}执行流程
- 当外层条件满足时,再执行内层判断。
注意:
- 一个选择结构中,可嵌套另一个选择结构
- 嵌套格式正确的情况下,支持任意组合
案例:
1 | public class TestNestedIf{ |
运行结果:
四、switch分支结构
语法
1
2
3
4
5
6
7
8
9
10switch(变量|表达式){
case 值1:
逻辑代码1;
case 值2:
逻辑代码2;
case 值n:
逻辑代码n;
default:
未满足以上条件时的逻辑代码;
}可判断的类型
byte、short、int、char、String(JDK7+)
执行流程
- 如果变量中的值等于值1,则执行逻辑代码。
- 如果变量中的值等于值2,则执行逻辑代码2。
- 如果变量中的值等于值n,则执行逻辑代码n。
- 如果变量中的值没有匹配的case值时,执行default中的逻辑代码。
注意:当匹配的case执行后,不会自动退出整个结构,而是继续往下执行。如需退出需要添加
break
关键字。
案例1:
1 | public class TestSwitch{ |
运行结果:
会发现weekDay
与5
匹配后,不仅将case
为5
的代码执行了,后续代码都相应执行了,这是没有添加break
退出结构。
案例2:解决案例1问题
1 | public class TestSwitch{ |
运行结果:
五、局部变量的特点与注意事项
- 概念:声明在方法内部的变量,必须先赋值再使用。未赋值使用将会报错
错误: 可能尚未初始化变量num
以上代码均在main主方法中写的,所以声明都是局部变量。
作用范围:定义行开始到所在的代码块结束。
注意:多个变量,在重合的作用范围内,不能出现重名(命名冲突)。
案例1:
1 | public class TestLocalVariable{ |
运行结果:
局部变量未赋值直接使用报错。
案例2:
1 | public class TestLocalVariable{ |
运行结果:
局部变量作用范围,定义行开始到所在的代码块结束。案例中int b=10
的作用范围在{}
中,因此System.out.println(b);
无法访问到b
。
案例3:命名冲突
1 | public class TestLocalVariable{ |
运行结果:
这是因为在第三行
定义的变量c
的作用范围在if
语句中,与if
语句中第五行
定义的变量名一致冲突报错。