概述
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:IdeaJAVATESTsrctesttest02.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
例二、成绩等级划分
该例子需要找到数据之间存在的一个逻辑规律
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
最后
以上就是英俊棒棒糖为你收集整理的JAVA-Switch语句的全部内容,希望文章能够帮你解决JAVA-Switch语句所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复