[JavaSE] java流程控制语句之Switch—Day06
目录
分支语句—— switch
总结:
分支语句—— 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的博客-CSDN博客
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:
判断单个值
二选一
多选一
嵌套