分支结构switch
格式:
switch(表达式) { //这里的表达式的结果只能是byte、short、char、int、String、枚举
case 值1: //case后面的值不能重复,所有case后面接的值都是不一样的
语句体1;
break; //当执行到break的时候,循环就结束了
case 值2:
语句体2;
break;
…
default: // 这个default就和if语句里面的else类似,并且default不止可以写在语句的最后面,也可以放在最前面都是不影响的
语句体n+1;
break;
}
//目标:掌握switch语句的使用
public class Demo06 {
public static void main(String[] args) {
/*
需求:提示键盘录入数字1~7,打印对应的星期数,例如输入1打印星期一,输入7打印星期天
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入星期数");
int week = scanner.nextInt();
switch (week){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("您输入的星期数有误");
break;
}
}
}
case穿透
何为穿透现象:
在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,后续的case就不会具有匹配效果,内部的语句不会结束,继续向下执行。直到看到break,或者将整个switch语句执行完毕,switch才会结束,事情都有两面性,有时可能因为漏掉某个break而导致代码有问题,但是穿透现象也有属于它的应用场景,比如下面的案例:
需求:提示键盘录入数字1~7,1~5打印工作日,6~7打印休息日
如果我们依旧按照上面的方式,将会出现很多重复的代码,那么我们可以这样利用case的穿透现象来做一个改良
public class Demo07 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入星期数");
int week = scanner.nextInt();
switch (week){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("输入有误");
break;
}
}
}
这样在输入1-5的时候,都会打印“工作日” ,而输6-7则会输“休息日”,而不用每一个case后面都接一个输出语句。