自学内容网 自学内容网

Java基础教程(002):Java判断和循环之switch语句

3.3 switch语句

3.3.1 switch基本格式

switch语句格式:

switch(表达式){
    case1:
        语句体1;
        break;
    case2:
        语句体2;
        break;
    ...
    default:
        语句体n+1;
        break;
}

执行流程:

  1. 首先计算表达式的值
  2. 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
  3. 如果所有的case后面的值和表达式的值都不匹配,就会执行defalut里面的语句体,然后结束整个switch语句。

格式说明:

  1. 表达式:(将要匹配的值)取值为byte、short、int、char。JDK5之后可以是枚举,JDK7之后可以是String
  2. case:后面跟的值要和表达式进行比较的值(被匹配的值)
  3. break:表示中断,结束的意思,用来结束switch语句
  4. default:表示所有的情况都不匹配的时候,就执行该处的内容,和if语句的else相似
  5. case后面的值只能是字面量,不能是变量
  6. case给出的值不允许重复

代码示例:

public class SwitchDemo1 {
    public static void main(String[] args) {
        // 1、定义变量记录我心里想吃的面
        String noodles = "火鸡面";
        // 2、拿着这个面利switch跟四种面条匹配
        switch (noodles) {
            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;
            default:
                System.out.println("吃泡面去吧你");
                break;
        }
    }
}

3.3.2 switch扩展

【1】default的位置和省略

public class SwitchDemo2 {
    public static void main(String[] args) {
        /*
            default的位置和省略
            1、位置:default不一定是写在最下面的,我们可以写在任意位置,只不过习惯会写在最下面
            2、省略:default可以省略,语法不会有问题,但是不建议省略
        */
        int number = 1;
        switch (number){
            case 5:
                System.out.println("number的值为1");
                break;
            case 10:
                System.out.println("number的值为10");
                break;
            case 1:
                System.out.println("number的值为20");
        }
    }
}

注意:

default的位置和省略
1、位置:default不一定是写在最下面的,我们可以写在任意位置,只不过习惯会写在最下面
2、省略:default可以省略,语法不会有问题,但是不建议省略

【2】case穿透

public class SwitchDemo2 {
    public static void main(String[] args) {
        /*
            default的位置和省略
            1、位置:default不一定是写在最下面的,我们可以写在任意位置,只不过习惯会写在最下面
            2、省略:default可以省略,语法不会有问题,但是不建议省略
        */
        int number = 1;
        switch (number){
            case 1:
                System.out.println("number的值为1");
//                break;
            case 10:
                System.out.println("number的值为10");
//                break;
            case 20:
                System.out.println("number的值为20");
//                break;
        }
    }
}

输出结果

D:\Environment\JDK1.8\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 
number的值为1
number的值为10
number的值为20

case穿透:

​ 就是语句体中没有写break导致的。

执行流程:

​ 首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配。

​ 如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句。

​ 如果没有发现break,那么程序就会继续执行下一个case语句体,直到遇到break或者大括号结束。

使用场景:

​ 如果有多个case语句体重复了,那么我们考虑使用case穿透去简化代码。

【3】switch新特性(大于JDK12版本)

switch(number){
    case 1 -> {
        System.out.println("1");
    }
    case 2 -> {
        System.out.println("2");
    }
    case 3 -> {
        System.out.println("3");
    }
    default -> {
        System.out.println("没有这个选项");
    }
}

注意:

如果大括号中只有一行代码,大括号也可以省略。

【4】switch和if第三种格式各自的使用场景

if的第三种格式一般用于对范围的判断。

switch一般用于把有限个数据一一列举出来,让我们任选其一。

3.3.3 练习

需求:

键盘录入星期数,输出工作日,休息日

(1-5)工作日。(6-7)休息日

代码实现:

public class SwitchDemoTest {
    public static void main(String[] args) {
        // 1、键盘录入星期数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期数:");
        int week = sc.nextInt();
        // 2、利用switch语句来进行选择
        switch (week) {
            case 1:
                case 2:
                    case 3:
                        case 4:
                            case 5:
                                System.out.println("工作日");
                                break;
            case 6:
                case 7:
                    System.out.println("休息日");
                    break;
            default:
                System.out.println("没有这个星期。");
                break;
        }
    }
}

原文地址:https://blog.csdn.net/WwLK123/article/details/143783118

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!