JAVA-Switch语句

1、完整的语法结构

        该语句为选择分支语句,其语法结构为:

switch (值){
    case:值1 java语句;break;
    case:值2 java语句;break;
    case:值3 java语句;break;
            ……
    default:java语句;
}

        注意在该语法结构中,“值N"可以表示int型的或者String类型的字面值或变量,Java语句可以是一句,也可以是多句构成的语句块;

2、switch语句参数

        “值N"可以表示int型的或者String类型的字面值或变量”,这就是对switch语句的一个参数类型的限制。之前在数据类型那里提到,byte、short、char具有特权,就是如果赋值给他们的整形字面值在取值范围之内,是可以直接赋值的,所以这就意味着,参数可以是byte,short,char类型的变量或者字面值。

       注意:JDK6参数只能是int类型,JDK7之后的版后边的参数可以是int和String类型的参数

        这也就意味着,如果参数传入一个更大的参数类型或者不兼容的参数类型,有可能会报错且损失精度,但是如果符合您的需求,可以通过强制类型转换符”(  )”来进行类型的转换,可以解决编译时的报错问题。

Scanner in=new Scanner(System.in);
        long data=in.nextInt();
        switch (data) {
            case 0:
            case 1:
            case 2:System.out.println(data);
            case 3:
            case 4:
            case 5:System.out.print(data+1);
        }
D:\Idea\JAVATEST\src\test\test02.java:418:16
java: 不兼容的类型: 从long转换到int可能会有损失

加入强转:

    Scanner in=new Scanner(System.in);
        long data=in.nextInt();
        switch ((int)data) {
            case 0:
            case 1:
            case 2:System.out.println(data);
            case 3:
            case 4:
            case 5:System.out.print(data+1);
        }

可以顺利执行:

1
1
2
进程已结束,退出代码为 0

3、Switch语句的执行原理( 电闸原理)

        switch后括号中的内容按照自上而下的顺序和分支case后的值进行一 一对比,如果匹配成功,则执行该case分支所对应的Java语句。【通过电闸进行理解,如果值相同,则电闸连通分支;break就相当于切断电闸,断掉主干和分支之间的连通,switch语句的执行就彻底结束了。】如果所有的case语句的值和switch的值均无法对应,那么看是否存在default语句,如果存在,则执行default语句,否则switch语句在没有分支成功匹配的情况下,会彻底结束。

(1)case击穿现象

        注意在switch语句的运行原理中有一个很重要的原理,就是case的击穿现象,理解了这个现象才能更好的应用switch语句进行代码的编写。

        所谓的case击穿现象,其实和break语句有关,当某个case分支连通,执行其后的java语句后,如果没有遇到break语句,则会继续执行,但是无需判断后边case分支的值,直接执行java语句,如此直到遇到break语句后,switch的语句彻底执行结束,这就是我们说的case击穿想想的原理。

        由此我们可以看出,break语句的存在可以避免击穿现象的发生。

        举例说明:接收用户输入,如果用户输入的是0,1,2,则进行输出,如果用户输入的是3,4,5则进行加一然后再输出;

Scanner in=new Scanner(System.in);
        int data=in.nextInt();
        switch (data) {
            case 0:
            case 1:
            case 2:System.out.print(data);
            case 3:
            case 4:
            case 5:System.out.print(data+1);
        }

        键盘输入数值1,输出如下所示:

1
1
2
进程已结束,退出代码为 0

        很明显,case 3,case 4,case 5三种情况对应的分支也运行了。

(2)case合并

        如果有需要,例如多个case分支的值的执行操作是相同的,这种情况下,就可以去合并多个case,只写次java操作语句即可。例如:接收用户输入,如果用户输入的是0,1,2,则进行输出,如果用户输入的是3,4,5则进行加一然后再输出;

        代码示例如下:

Scanner in=new Scanner(System.in);
        int data=in.nextInt();
        switch (data) {
            case 0:
            case 1:
            case 2:System.out.print(data); break;
            case 3:
            case 4:
            case 5:System.out.print(data+1);break;
        }

        输入3,4,5,输出结果分别为4,5,6

        输入1,2,3,输出结果分别为1,2,3


例一、时间输出

        Scanner in=new Scanner(System.in);
        int date=in.nextInt();
        String time="";
        switch(date){
            case 1:time="星期一";break;
            case 2:time="星期二";break;
        }
        System.out.println("今天是"+time);

输出结果:

1
今天是星期一

进程已结束,退出代码为 0

例二、成绩等级划分

该例子需要找到数据之间存在的一个逻辑规律

JAVA-Switch语句

35
35.0对应的成绩等级为:E
进程已结束,退出代码为 0

         对于这个对照关系,如果用if语句很简单的就可以写出来,但是我们要练习的是switch语句的熟练使用。

        那么在这些区间中找出一个能够代表各区间的具有规律的一个数值,成绩在在90-100之间无论整数还是浮点数,除以10得到的都是9,一次类推,各阶段除以10依次对应:

        A——9,B——8,C——7,D——6,E——(5.4.3.2.1)

        所以用switch进行代码编写如下:

        Scanner in=new Scanner(System.in);
        float score=in.nextFloat();
        char grade=' ';
        switch ((int)score/10){
            case 9:grade='A';break;
            case 8:grade='B';break;
            case 7:grade='C';break;
            case 6:grade='D';break;
            default:grade='E';break;
        }
    System.out.print(score+"对应的成绩等级为:"+grade);

输出如下所示:

35
35.0对应的成绩等级为:E
进程已结束,退出代码为 0
上一篇:linux 安装Jenkins


下一篇:Rust在loop循环中返回值