if分支有三种格式
格式1:
if(条件表达式){
语句体;
}
格式2:
if(条件表达式){
语句体1;
}else{
语句体2;
}
格式3:
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}else if(条件表达式3){
语句体3;
}
……
else{
语句体n+1;
}
三种格式要如何选择呢?由代码长度不难看出,前两种格式更适合比较判断条件少的情况,第三种则更适合条件判断多的情况。案例代码如下:
public class IfDemo { public static void main(String[] args) { //需求:心跳(60-100)之间为正常,否则系统提示进一步检查 //格式1 int heartBeat = 30; if(heartBeat < 60 || heartBeat > 100){ System.out.println("您的心跳数据是:"+heartBeat+",您可能需要进一步检查!"); } System.out.println("检查结束。"); System.out.println("------------------分割线--------------------"); //需求:发红包 //格式2 double money = 1; if(money>1314){ System.out.println("红包发送成功~"); }else{ System.out.println("余额不足哦~"); } System.out.println("-----------------分割线---------------------"); //需求:绩效系统 0-60 C 60-80 B 80-90 A 90-100 A+ //格式3 int score = 99; if (score >= 0 && score < 60){ System.out.println("您本月的绩效是:C"); }else if (score >= 60 && score < 80){ System.out.println("您本月的绩效是:B"); }else if(score >=80 && score <90){ System.out.println("您本月的绩效是:A"); }else if (score >=90 && score <=100){ System.out.println("您本月的绩效是:A+"); }else{ System.out.println("录入分数有误哦~"); } } }
switch分支
- 也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好。
执行流程:
- 先执行表达式的值,拿着这个值去与case后的值进行匹配。
- 匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。
- 如果case后的值都不匹配则执行default代码。
代码格式如下:
switch(表达式){
case值1:
执行代码……;
break;
case值2:
执行代码……;
break;
……
case值n-1:
执行代码……;
break;
default:
执行代码n;
}
案例代码如下:
public class switchDemo { public static void main(String[] args) { String weekday = "周日"; switch (weekday) { case "周一": System.out.println("上学啦!"); break; case "周二": System.out.println("还是上学~"); break; case "周三": System.out.println("什么时候周末啊~"); break; case "周四": System.out.println("要放假咯~"); break; case "周五": System.out.println("今晚吃鸡!"); break; case "周六": System.out.println("今晚继续吃鸡!"); break; case "周日": System.out.println("emotional,又要上课了……"); break; } } }
问:if、switch分支各自适合做什么业务场景?
- if其实在功能上远远强大于switch。
- if适合做区间匹配。
- switch适合做:值匹配的分支选择、代码优雅。
switch分支注意事项:
- 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
- case给出的值不允许重复,且只能是字面量,不能是变量。
- 不要忘记些break,否则会出现穿透现象。
switch穿透性能解决什么问题?
- 存在多个case分支的功能代码是一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码。
具体场景:用户输入月份可以展示该月份的天数。
1、3、5、7、8、10、12月份是31天,2月份的闰年29天、非闰年为28天。4、6、9、11月份是30天。
解决办法很简单,利用switch分支,写出10多个case进行匹配就可以了。但这样会出现很多重复的代码,代码冗余一点也不优雅~ 这时,switch穿透性就可以很好的解决该问题。具体代码如下:
public class switchDemo2 { public static void main(String[] args) { //需求:用户输入月份可以展示该月份的天数。 //一三五七八十腊,三十一天永不差~ //2月闰年29天、非闰年为28天。 //4、6、9、11月份是30天。 int month = 5; switch (month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println(month+"月是31天。"); break; case 2: System.out.println(month + "月闰年29天、非闰年为28天。"); case 4: case 6: case 9: case 11: System.out.println(month + "月是30天。"); break; default: System.out.println("你在写啥玩意?"); } } }