Java分支结构
1. if分支结构
- 根据判定的结果(真或假)决定执行某个分支的代码
1.1. if 分支的三种格式
//格式一:
if(条件表达式){
语句体;
}
//格式二
if(条件表达式){
语句体1;
}else{
语句体2;
}
//格式三
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2
}else if(条件表达式3){
语句体3;
}
...
else{
语句体n;
}
2. switch分支
-
也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好。
switch(表达式){ case 值1: 执行代码...; break; case 值2: 执行代码...; break; case 值3: 执行代码....; break; ... case 值n-1: 执行代码; break; default: 执行代码n; }
执行流程:
- 先执行表达式的值,拿着这个值去与case后的值相匹配。
- 匹配哪一个case的值为true就执行哪一个case,遇到break就跳出switch分支
- 如多case后的值都不匹配则执行default代码
switch案例
- 周一:埋头苦干,解决bug
- 周二:请求大牛程序员帮忙
- 周三:今晚啤酒,龙虾,小烧烤
- 周四:主动帮忙新来的女程序员解决bug
- 周五:今晚吃鸡
- 周六:休息
- 周日:郁郁寡欢,准备上班
import java.util.Scanner;
public class SwitchDemo {
//目标:掌握switch分支语句
public static void main(String[] args) {
//创建键盘扫描器对象
Scanner sc = new Scanner(System.in);
int num ;
while(true){
//给出键盘输入提示
System.out.println("请输入星期数(1-7):");
//接收键盘输入数据
num = sc.nextInt();
switch (num){
case 1:
System.out.println("埋头苦干,解决bug");
break;
case 2:
System.out.println("请求大牛程序员帮忙");
break;
case 3:
System.out.println("今晚啤酒,龙虾,小烧烤");
break;
case 4:
System.out.println("主动帮忙新来的女程序员解决bug");
break;
case 5:
System.out.println("今晚吃鸡");
break;
case 6:
System.out.println("休息");
break;
case 7:
System.out.println("郁郁寡欢,准备上班");
break;
default:
System.out.println("你输入的数据有误,请重新输入!");
}
}
}
}
if、switch分支各自适合做什么业务场景
- if其实在功能上远远强大于switch
- if适合做区间匹配
- switch适合做:值匹配的分支选择,代码优雅
- switch的性能要强于if
switch分支注意事项
- 表达式类型只能是byte,short,char,jdk5开始支持String,不支持double,float,long
- case给出的值不允许重复,且只能是字面量,不能是变量
- 不要忘记break,否则会出现穿透现象
3. switch穿透
import java.util.Scanner;
public class SwitchDemo2 {
//理解switch语句的穿透现象
public static void main(String[] args) {
//创建键盘扫描器对象
Scanner sc = new Scanner(System.in);
//定义变量存储,键盘输入内容
int mounth;
//利用switch语句判断输入月份所属的季节
while(true){
//给出键盘录入提示
System.out.println("请输入你要判断的月份数(1-12):");
mounth = sc.nextInt();
switch(mounth){
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("你输入的数据有误,请重新输入:");
}
}
}
}
- 什么情况下会出现switch穿透现象
- case中没有写break。
- switch穿透性能解决什么问题
- 存在多个case分支的功能代码是一样的,可以用穿透性把流程集中到同一处处理,这样可以简化代码。