Java分支结构-if分支,switch分支,switch穿透性

一,if分支

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

1.分支的作用

例1:比如你去医院检查,医生给你测心跳,这个心跳数据呢,会录入到医院的系统里,然后判断你的心跳有没有超过正常指标,如果超过,就视为不正常;没超过或者刚刚好,就是正常的。

例2:比如发微信红包给别人的时候,微信会判断你的钱包额度够不够发这个额度的红包,如果够,就可以发出;如果不够,就不能发。

2.if分支的三种格式:

if:如果的意思

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

格式1例子:

        String patientName = "刘备";  // 病人
        // 异常心跳
        int heartRate = 30;     // 用于测试 if分支结构
        // 正常心跳
        int heartRate2 = 80;     // 用于测试 if分支结构

        System.out.println("测试病人心跳数据异常时:");
        System.out.println("开始检查...");
        //2.使用if分支结构的 格式1 来判断心跳数据是否小于60,或者大于100,如果是true,就为异常
        if (heartRate < 60 || heartRate > 100) {    // if判断心跳数据是否小于60,或者大于100
            // 判断结果为true,发现病人的心跳数据异常,需进一步检查
            System.out.println(patientName + "先生,您的心跳数据是:" + heartRate + ",还需进一步检查!");
        }
        // 检查结束!
        System.out.println("检查结束!");

        System.out.println("\n测试病人心跳数据正常时:");
        System.out.println("开始检查...");
        // if判断心跳数据是否小于60,或者大于100,如果是true,就为异常
        if (heartRate2 < 60 || heartRate2 > 100) {
            // 判断结果为false,发现病人的心跳数据正常,不符合判断条件,所以不执行if里的代码语句
            System.out.println(patientName + "先生,您的心跳数据是:" + heartRate2 + ",还需进一步检查!");
        }
        // 检查结束!
        System.out.println("检查结束!");

格式2例子:

       // 需求:给女朋友发一个1314的红包,钱包余额:1550.89
        /*
            分析需求:
            1.定义一个男方名字、钱包:余额为1550.89
            2.使用if分支结构的 格式2 来判断男方微信钱包余额是否大于等于1314;
               如果大于等于1314,则返回:“红包已发送!”
               如果小于1314,则返回:“钱包余额不足,红包未发送!”
            3. 格式2:if (条件表达式) {代码块1...} else {代码块2...}
         */
        // 1.定义一个男方名字、钱包:余额为1550.89
        String manName = "赵云";
        double money = 1550.89;  // 模拟钱包余额充足
        double money2 = 2.5;     // 模拟钱包余额不足

        System.out.println("测试钱包余额充足时:");
        // 2.使用if分支结构的格式2来判断男方微信钱包余额是否大于等于1314
        if (money >= 1314) {
            // 判断结果为true,发现用户的余额大于等于1314,则返回:“红包已发送!”,将不执行代码块2
            System.out.println(manName + "先生,您的红包已发送成功!");
        }else {
            // 判断结果为false,发现用户的余额小于1314,则返回:“钱包余额不足,红包未发送!”,将不执行代码块1
            System.out.println(manName + "先生,您的钱包余额已不足,红包未发送成功!");
        }

        System.out.println("\n测试钱包余额不足时:");
        // 2.使用if分支结构的格式2来判断男方微信钱包余额是否大于等于1314
        if (money2 >= 1314) {
            // 判断结果为true,发现用户的余额大于等于1314,则返回:“红包已发送!”,将不执行代码块2
            System.out.println(manName + "先生,您的红包已发送成功!");
        }else {
            // 判断结果为false,发现用户的余额小于1314,则返回:“钱包余额不足,红包未发送!”,将不执行代码块1
            System.out.println(manName + "先生,您的钱包余额已不足,红包未发送成功!");
        }

格式3例子:

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的分数");
        int i = sc.nextInt();
        if (i>=0&&i<60){
            System.out.println("c级员工能不能滚阿");
        }else if (i>=60 &&i<80){
            System.out.println("b级员工还有点用");
        }else if (i>=80&&i<90){
            System.out.println("a级员工中流砥柱");
        }else if (i>=90&&i<=100){
            System.out.println("a+员工下个月就提拔你");
        }else {
            System.out.println("输入分数都输不懂赶紧种田");
        }

特点

第一种格式:适合一个判断条件使用:条件表达式判断为true时,则执行语句体
第二种格式:适合一个判断条件,如果…否则使用:条件表达式判断为true时,则执行里面的语句体1;否则为false,执行语句体2;
第三种格式:适合多个判断条件使用:条件表达式1判断为true时,则执行语句体1;条件表达式1判断为false,则进行条件表达式2的判断,为true,则执行语句体2;… 如果条件表达式1和2和 … 的判断都为true,则执行最后一个 else 里的语句体

二:switch分支

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

switch(表达式) {
    case 值1:
        执行代码...;
       	break;	// 跳出switch分支
    case 值2:
        执行代码...;
        break;
    ...
    case 值n-1:
        执行代码n-1...;
        break;
    default:
        执行代码n;
}

执行流程:

1.先执行表达式的值,拿着这个值与case后的值进行匹配。

2.匹配哪个case的值为true,就执行哪个,遇到break就跳出switch分支。

3.如果case后的值都不匹配则执行default。

switch例子:

//        一、需求:备忘录(一周的行程)
//        二、分析需求
//        1.定义变量,分别存放周一、周二、周三、周四、周五、周六、周日
//        2.使用switch分支结构,设置case值,用变量值 与 case值 进行匹配,提示当天该干什么
        Scanner sc = new Scanner(System.in);        //键盘输入
        System.out.println("需要观察周几的日程");        //贴心的给出提示
        String weekday = sc.next();
        switch (weekday){                       //用变量值与case值进行匹配,输出当天该干什么
            case "周一":
                System.out.println("巡视工作,观察环境");
                break;
            case "周二":
                System.out.println("请求大牛程序员帮忙解决bug");
                break;
            case "周三":
                System.out.println("主动帮助新来的女程序员解决bug");
                break;
            case "周四":
                System.out.println("今夜吃麻辣香锅");
                break;
            case "周五":
                System.out.println("洗漱干净等待周末");
                break;
            case "周六":
                System.out.println("与王婆介绍的小芳相亲");
                break;
            case "周日":
                System.out.println("郁郁寡欢,准备上班");
                break;
            default:                // 当switch(表达式)——>表达式的值匹配不上所有case后的值时,执行以下代码
                System.out.println("数据输入错误");

        }

三:switch穿透性

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

switch穿透性案例(月份天数查看器)

  • 需求:用户输入月份可以展示该月份的天数

    • 1、3、5、7、8、10、12月份都是31天
    • 2月份是闰年为29天、非闰年为28天
    • 4、6、9、11月是30天
// 目标:通过案例学会使用switch的穿透性,并理解其流程
        /*
          需求:用户输入月份可以展示该月份的天数
               (1) 1、3、5、7、8、10、12月份都是31天
               (2) 2月份是闰年为29天、非闰年为28天
               (3) 4、6、9、11月是30天
          分析需求 :
               1.导入Scanner包
               2.创建Scanner扫描器对象
               3.定义变量,用于接收用户输入的月份
               4.使用switch分支将 用户输入的月份 与 case值 进行匹配
               5.利用switch的穿透性设置case值为1、3、5、7、8、10都不设置break跳出,直到12才设置break跳出分支,执行输出:用户输入的月份 + ”月是31天“
               6.case值为2时,设置break跳出分支,执行输出:用户输入的月份 + ”月是闰年为29天、非闰年为28天“
               7.case值为4、6、9都不设置break跳出,直到11才设置break跳出分支,执行输出:用户输入的月份 + ”月是30天“
         */
         // 2.创建Scanner扫描器对象
            Scanner sc = new Scanner(System.in);
            System.out.println("请您输入月份(1~12):");
         // 3.定义变量,用于接收用户输入的月份
            int month = sc.nextInt();
         // 4.使用switch分支将 用户输入的月份 与 case值 进行匹配
            switch (month) {
                // 5
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    System.out.println(month + "月是31天");
                    break;
                // 6
                case 2:
                    System.out.println(month + "月是闰年为29天、非闰年为28天");
                    break;
                // 7
                case 4:
                case 6:
                case 9:
                case 11:
                    System.out.println(month + "月是30天");
                    break;
                default:
                    System.out.println("数据错误!");
            }
  • 存在多个case分支的功能代码是一样时,可以利用穿透性把流程集中到同一处地方处理,这样可以简化代码
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值