问题描述
- 关于Switch语句,求大神解答!感谢!
-
public class HelloWorld {
public static void main(String[] args) {
int num=1;
switch(num){
case 1:
System.out.println("1");
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
default:
System.out.println("4");} }
小弟学习Java时遇到的问题,:关于上述代码,如果把case1后面的break去掉,我能理解case1的语句能执行,到case2后面的break终止,但是switch中num的值和case2后面的值不匹配,为什么会执行case2后面的语句呢?
十分感谢帮忙的大神!
解决方案
switch这个开关,他会去找是否有和num这个数值相等的case 值,有的话就会执行后面的输出语句,注意,一旦判断成功了,不管后面的case 值是多少,程序都会
执行相应的输出语句,所以,通常情况下为了避免此错误,都会在每个case的逻辑语句后面加上一个 break,一旦执行成功,就会跳出switch。
解决方案二:
你可以这样理解,第一次判断num=1就是相当于买了一张电影票进去放映厅了,只要不碰到清场(break),他看完1号厅的电影还可以接着去看2号厅的电影,
直到碰到清场(break)才会从电影院赶出来。当然,现实中电影院没有清场这一说,一般也没有人看完一场留在里面看第二场。
解决方案三:
swich case其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
解决方案四:
swich case其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
解决方案五:
这个问题是switch语句的语法决定的,如果某个分支进入后没有break语句,无论值是否满足下一个分支都会执行的,所以使用switch必须细心避免这个陷阱。
解决方案六:
你case1后面没加break呀
解决方案七:
当语句执行碰到break 才会终止
解决方案八:
case 2后面不会执行了吧!
解决方案九:
case1后面加break,跳出switch语句,不做后面的case
解决方案十:
你如果不再case后面加break的话他就会继续往下执行,执行到case2的时候的时候发现num的值不对了就会跳出循环。