选择结构 也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句 if语句 switch语句
2.1 if语句有三种格式(选择结构)
① if语句第一种格式:
if(关系表达式) {
语句体
}
执行流程: 首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
注意:
关系表达式无论简单还是复杂,结果必须是boolean类型
if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
一般来说:有左大括号就没有分号,有分号就没有左大括号 例如:
int b = 100;
if(b != 100); //这里其实是有语句体的,只不过是空语句体。
//代码块
{
System.out.println("b的值是100");
System.out.println("over");
}
② if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程: 首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
注意:else后面是没有比较表达式的,只有if后面有。
三元运算符实现的,都可以采用if语句实现。反之不成立。
什么时候if语句实现不能用三元改进呢?
当if语句控制的操作是一个输出语句的时候就不能。
为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
class IfDemo4 {
public static void main(String[] args) {
//获取两个数据的最大值
int a = 10;
int b = 20;
//用if语句实现
int max1;
if(a > b) {
max1 = a;
}else {
max1 = b;
}
System.out.println("max1:"+max1);
//用三元改进
int max2 = (a > b)? a: b;
System.out.println("max2:"+max2);
System.out.println("----------");
//判断一个数据是奇数还是偶数,并输出是奇数还是偶数
int x = 100;
if(x%2 == 0) {
System.out.println("100是一个偶数");
}else {
System.out.println("100是一个奇数");
}
//用三元改进;这种改进是错误的。
//String s = (x%2 == 0)?System.out.println("100是一个偶数");:System.out.println("100是一个奇数");;
}
}
③ if语句第三种格式:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
} …
else {
语句体n+1;
}
执行流程: 首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。
④ 嵌套 if 语句
只有当外层 if 的条件成立时,才会判断内层 if 的条件。
语法:
执行过程:
示例代码:
2.2 switch语句(选择结构)
switch语句格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
格式解释:
switch表示这是switch语句
表达式的取值:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是String
case后面跟的是要和表达式进行比较的值
语句体部分可以是一条或多条语句
break表示中断,结束的意思,可以结束switch语句
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行
相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
示例代码:
不得不说的几点小秘密:
1、 switch 后面小括号中表达式的值必须是整型或字符型
2、 case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2
3、 case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束:
4、 可以把功能相同的 case 语句合并起来,如
5、 default 块可以出现在任意位置,也可以省略