概述
switch语句, 一般是用于做固定值判断的, 在实际开发中, 用到的频率也非常高, 所以也是要求大家掌握的知识点.
格式
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
... //根据需求, 可以写多组case.
default:
语句体n;
break;
}
格式详解
执行流程
先计算表达式的值, 然后按照从上往下的顺序依次和每一个case对应的值相匹配.
如果能匹配成功, 则执行该case对应的语句体, 然后执行break, 至此, 整个switch语句结束.
如果和所有的case值都不匹配, 则执行default对应的语句体, 然后执行break, 至此, 整个switch语句结束.
- : default语句就类似于if. else语句中的else, 当所有条件都不满足时才会执行.
执行流程图解
示例一: 春夏秋冬
需求
一年有12个月, 分属于春夏秋冬4个季节, 键盘录入一个月份, 请用程序实现判断该月份属于哪个季节, 并输出。
具体标准如下:
- 输入: 1、2、12 输出:冬季
- 输入: 3、4、5 输出:春季
- 输入: 6、7、8 输出:夏季
- 输入: 9、10、11 输出:秋季
- 输入:其它数字 输出:数字有误
参考代码
import java.util.Scanner;
public class SwitchDemo07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个月份: ");
int month = sc.nextInt();
switch (month) {
case 12:
System.out.println("冬季");
break;
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;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
default:
System.out.println("没有这样的日期");
break;
}
}
}
case穿透
概述
在switch语句中,如果case的后面不写break,将出现case穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
格式
switch(表达式) {
case 值1:
语句体1; //假设表达式的值 = 值1, 则执行完语句体1后, 不会判断第二个case, 直接执行语句体2;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
... //根据需求, 可以写多组case.
default:
语句体n;
break;
}
需求 通过case穿透, 优化刚才的春夏秋冬案例.
参考代码
import java.util.Scanner;
public class SwitchDemo08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个月份: ");
int month = sc.nextInt();
switch (month) {
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("没有这样的日期");
break;
}
}
}
思考题
switch语句的小括号中, 可以放什么?
default语句必须放到switch语句的最后吗?
break关键字可以省略吗? 对执行结果是否有影响?
案例二: 发放奖励
需求
小明快要期末考试了,小明爸爸对他说,会根据他的考试成绩,送他不同的礼物.
假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
礼物标准如下:
- 90~100 山地自行车一辆
- 80~89 游乐场玩一次
- 70~79 变形金刚玩具一个
- 70以下 胖揍一顿
参考代码
import java.util.Scanner;
public class SwitchDemo09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入小明的考试成绩: ");
int score = sc.nextInt();
if (score >= 0 && score <= 100) {
//合法成绩
switch (score / 10) {
case 10:
case 9:
System.out.println("奖励小明: 山地自行车一辆");
break;
case 8:
System.out.println("奖励小明: 游乐场玩儿一次");
break;
case 7:
System.out.println("奖励小明: 变形金刚玩具一个");
break;
default:
System.out.println("奖励小明: 男女双混组合拳 + 扫帚棒法");
break;
}
} else {
//非法成绩
System.out.println("您录入的成绩有误!");
}
}
}