目录
分支语句—— switch
//语法结构:
switch(表达式){
case 值1:
...代码块1...
break;
case 值2:
...代码块2...
break;
case 值n:
...代码块n...
break;
default:
...default代码块...
break;
}
注意:
表达式的结果:byte、short、char、int、字符串(JDK1.7)、枚举(JDK1.5)
表达式的结果分别于值1、值2、值n比较,哪个相等就执行对应的代码块
break表示跳出整个switch分支
default表示表达式的结果分别于值1、值2、值n比较,都不匹配的情况,就执行default代码块
default代码块根据需求可写可不写
例:
switch(500){
case 10:
System.out.println("10");
break;
case 50:
System.out.println("50");
break;
case 100:
System.out.println("100");
break;
default:
System.out.println("default代码块");
break;
}
System.out.println("switch以外的代码");
运行结果:
例子:
小邓参加计算机编程大赛
如果获得第一名,将参加公司组织的1个月马尔代夫旅游
如果获得第二名,将奖励苹果Pro笔记本电脑一部
如果获得第三名,将奖励移动硬盘一个
否则,白经理扣小邓同学工资
//1.输入名次
Scanner scan = new Scanner(System.in);
System.out.println("请输入比赛名次:");
String str = scan.next();
//2.判断
switch(str){
case "第一名":
System.out.println("和白经理一起参加公司组织的1个月马尔代夫旅游");
break;
case "第二名":
System.out.println("奖励苹果Pro笔记本电脑一部");
break;
case "第三名":
System.out.println("奖励移动硬盘一个");
break;
default:
System.out.println("白经理扣小邓工资");
break;
}
运行结果:
知识点:switch的底层原理
switch表达式的结果:byte、short、char、int、字符串(JDK1.7)、枚举(JDK1.5)
底层都是将byte、short、char、字符串(JDK1.7)、枚举(JDK1.5)转换为int类型,再做比较
byte 向上转型成 int
short 向上转型成 int
char 向上转型成 int
字符串 获取到字符串的hash值 int
枚举 获取枚举类对象里的数值 int
知识点:switch的面试题
case的值可以相同吗?
不可以,语法错误
default可以省略吗?
default类似于if中的else,可以省略
break可以省略吗?
可以省略(也不一定)注意参考:关于switch中的default里面的break是否可以省略这件事_Vengo€bs的博客-优快云博客
default的位置一定要在最后吗?
不一定,但是考虑到可读性建议在最后
表达式值的类型可以是什么?
byte、short、char、int、字符串(JDK1.7)、枚举(JDK1.5)
case后面值的类型可以是不一样吗?
可以,但是要看是否兼容
switch(97){
case 10:
System.out.println("10");
break;
case 50:
System.out.println("50");
break;
case 'a':
System.out.println("a");
break;
default:
System.out.println("default代码块");
break;
}
运行结果:
例子:
需求:输入年和月,输出当月的天数
分析:
1、3、5、7、8、10、12:31天
4、6、9、11:30天
2:平年28天、闰年29天
年份被4整除且不能被100整除 或者 年份被400整数 为闰年
//1.输入年和月
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();
//2.判断
int day = 0;//当月的天数
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day = 31;
break;
case 4:case 6:case 9:case 11:
day = 30;
break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0){//闰年
day = 29;
}else{//平年
day = 28;
}
break;
}
//3.输出
System.out.println(year + "年" + month + "月当月的天数为:" + day + "天");
运行结果:
总结:
if vs switch
表达式的区别:
if:表达式只能是boolean
switch:表达式可以是byte、short、int、char、字符串、枚举
应用场景的区别:
if:
判断区间
判断负责条件
二选一
多选一
嵌套
switch:
判断单个值
二选一
多选一
嵌套