(1)switch分支的使用
语法结构:
switch(表达式){
case 值1:
...代码块1...
break;
case 值2:
...代码块2...
break;
case 值n:
...代码块n...
break;
default:
...default代码块...
break;
}
理解:
表达式分别跟值1、值2、值n比较,那个相同就执行对应的代码块
break表示跳出当前switch分支
default代码块类似于if分支中的else//注意: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代码块");//500——执行 break; } System.out.println("switch分支以外的代码");//500——执行
案例:张三参加计算机编程大赛
如果获得第一名,将参加千锋组织的1个月马尔代夫旅游
如果获得第二名,将奖励苹果Pro笔记本电脑一部
如果获得第三名,将奖励移动硬盘一个
否则,何老师晚上给张三通宵补课Scanner scan = new Scanner(System.in); System.out.println("请输入比赛名次:"); String str = scan.next(); 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主要用于判断单个值是否相同
(2)switch分支的深入
1、case的值可以相同吗?
不可以
2、default可以省略吗?
可以(根据需求可写可不写,不违反语法规则)
3、break可以省略吗?
可以
4、default的位置一定要在最后吗?
default可以不放在最后,但是为了代码的可读性,需要放在最后
5、表达式值的类型可以是什么?(6种)
int、byte、short、char、枚举(JDK1.5)、String(JDK1.7)
6、switch判断的底层原理是什么?
switch判断值与值之间是否相同,只识别int类型
原因:
1).switch是将byte、short、char、枚举(JDK1.5)、String(JDK1.7)转换为int类型
2).switch底层命令只支持识别int值
byte --> int 自动转型
short --> int 自动转型
char --> int 获取字符的Unicode码
枚举 --> int 获取枚举类对象的编号
String --> int 获取字符串的hash码
long、float、double类型转成int类型都大转小,会损失精度
boolean:因为布尔类型不能转成 in 他类型,布尔类型不能与其他类型兼容
案例:输入年和月,输出当月的天数
分析:
1、3、5、7、8、10、12月 -- 31天
4、6、9、11月 -- 30天
2月 -- 闰年29天、平年28天
注意:年份被4整除并且不被100整除 或者 被400整除就为闰年Scanner scan = new Scanner(System.in); System.out.println("请输入年:"); int year = scan.nextInt(); System.out.println("请输入月:"); int month = scan.nextInt(); 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; } System.out.println(year + "年" + month + "月的天数为:" + day + "天");
(3)if vs switch
表达式的区别:
if的表达式只支持boolean类型的数据
switch的表达式支持byte、short、int、char、枚举、String类型的数据
应用场景的区别:
if可以判断区间和复杂条件
switch可以判断单个值是否相同