Java初接触 | 流程控制结构【分支结构】

103 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12月更文挑战」的第9天

流程控制结构

流程控制语句——控制程序的执行流程

顺序结构——程序默认流程
分支结构——if、switch
循环结构——for、while、do...while

分支结构

if适合做区间匹配 switch适合做值匹配的分支选择,代码优雅

If分支

根据判定的结果(真或假)决定执行某个分支的代码

格式1if(条件表达式) {
    语句体;
}
格式2if(条件表达式) {
    语句体1;
} else {
    语句体2;
}
格式3if(条件表达式1) {
    语句体1;
} else if(条件表达式2){
    语句体2;
} else if(条件表达式3){
    语句体3;
...
else {
    语句体n+1;
}

案例:

//需求:心跳(60-100)之间是正常的,否则系统提示进一步检查
//格式1: if(条件表达式){ 代码... }
int heartBeat = 30;
if(heartBeat < 60 || heartBeat > 100) {
    System.out.println("您的心跳数据是:"+heartBeat+",您可能需要进一步检查!");
}
System.out.println("检查结束");

// 格式2: if(条件表达式){代码... } else {代码... }
//需求:发红包。
double money = 1;
//发送一个1314.
if(money >= 1314){
    System.out.println("您当前发送红包成功~~~");
} else {
    System.out.println("您自己都没钱,就别发了~~”);
}

//格式3 if(条件表达式) {代码...}else if(条件表达式){代码...}...else{代码...}
//绩效系统: 0-60 C 60-80 B 80-90 A 90-100 A+
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){
    Systen.out.printLn("您本月的绩效是:A+);
}else {
    Systen.out.printLn("您录入的分数有毛病!");
}

switch分支

也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好

switch(表达式){
    case1:
        执行代码...;
        break;
    case2:
        执行代码...;
        break;
    ...
    case 值n-1:
        执行代码...;
        break;
    default:
        执行代码n;
}

执行流程:
1.先执行表达式的值,拿着这个值去与case后的值进行匹配。
2.匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。
3.如果case后的值都不匹配则执行default代码。

switch案例

//目标:学会使用switch分支结构,理解流程
//周一:埋头苦干,解决bug 
//周二:请求大牛程序员帮忙 
//周三:今晚啤酒、龙虾、小烧烤 
//周四:主动帮助新来的女程序解决bug
//周五:今晚吃鸡
//周六:与王婆介绍的小芳相亲
//周日:郁郁寡欢、准备上班。

String weekday = "周三";
switch (weekday) {
    case "周一":
        System.out.println("埋头苦干,解决bug");
        break;
    case "周二":
        System.out.println("请求大牛程序员帮忙");
        break;
    case "周三":
        System.out.println("今晚啤酒、龙虾、小烧烤");
        break;
    case "周四":
        System.out.println("主动帮助新来的女程序解决bug");
        break;
    case "周五":
        System.out.println("今晚吃鸡");
        break;
    case "周六":
        System.out.println("与王婆介绍的小芳相亲");
        break;
    case "周日":
        System.out.println("郁郁寡欢、准备上班");
        break;
    default:
        System.out.println("数据有误!");
}

switch分支注意事项:
1.表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long
2.case给出的值不允许重复,且只能是字面量,不能是变量。
3.不要忘记写break,否则会出现穿透现象。

switch的穿透性
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性。

//需求:用户输入月份可以展示该月份的天数。
//1、3、5、7、8、10、 12月份是31天
//2月份是闰年为29天、非闰年为28天
//4、6、9、11月份 是30天

int month = 7;
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天!");
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        System.out.println(month +"是30天!");
        break;
    default:
        System.out.println("数据有误!");
}

总结:
1.什么情况下会出现switch穿透现象?
case中没有写break。
2.switch穿透性能解决什么问题?
存在多个case分支的功能代码是一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码。