当前位置:   article > 正文

JAVA-Switch语句_java switch语句

java switch语句

1、完整的语法结构

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

  1. switch (值){
  2. case:值1 java语句;break;
  3. case:值2 java语句;break;
  4. case:值3 java语句;break;
  5. ……
  6. default:java语句;
  7. }

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

2、switch语句参数

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

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

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

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

加入强转:

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

可以顺利执行:

  1. 1
  2. 1
  3. 2
  4. 进程已结束,退出代码为 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则进行加一然后再输出;

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

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

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

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

(2)case合并

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

        代码示例如下:

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

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

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


例一、时间输出

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

输出结果:

  1. 1
  2. 今天是星期一
  3. 进程已结束,退出代码为 0

例二、成绩等级划分

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

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

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

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

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

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

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

输出如下所示:

  1. 35
  2. 35.0对应的成绩等级为:E
  3. 进程已结束,退出代码为 0
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据挖掘灵魂/article/detail/62370
推荐阅读
相关标签
  

闽ICP备14008679号