java switch语句这个输出为什么不是2而是5?求指点
8个回答
展开全部
switch是按照代码的顺序执行的。
先执行的是第一个switch的default
即switch(b) {}
因为b=1,所以执行default分支,这时s=2,退出内层的switch
因为switch(a)的default没有break,会继续往下执行,就执行到case 1这里,然后s=2+3=5,然后就break了。
比如我改一下代码:
int a = 0, b = 1, s = 0;
switch (a) {
default:
switch (b) {
case 0:
s += 1;
default:
s += 2;
break;
}
case 2:
s += 1;
case 1:
s += 3;
break;
case 3:
s += 2;
break;
}
System.out.println(s);
这个时候s就等于6。
执行的顺序是
1.switch(b)的default->s=2
2.switch(a)的case 2->s=3
3.switch(a)的case 1->s=6,因为这个时候break,所以就不继续往后执行了。
所以,一般为了得到正确的结果都会再每个分支后加一个break
展开全部
switch(b):default:的break;只break掉了switch(b),switch(a)继续顺序执行,也就是case 1:的部分也会被执行。所以s=0+2+3=5
你在程序中设个断点,跟踪一下就了解了。
你在程序中设个断点,跟踪一下就了解了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为case :S+=3;这段语句被误以为是switch(b)里面的语句了,所以你要把这个语句提到前面就不会出问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-09-03
展开全部
s+=2后面的break只是跳出了switch(b)那个循环语句。 switch(a)中走完了它的default之后并没遇见default的break语句,所以他继续走了case1 。
switch有个现象,就是如果在case中没有匹配到那么直接找default,没有default跳出。如果匹配到了,会把下面的case都执行一边,除非遇见那个case中有break为止 。不知道我说的清楚么
switch有个现象,就是如果在case中没有匹配到那么直接找default,没有default跳出。如果匹配到了,会把下面的case都执行一边,除非遇见那个case中有break为止 。不知道我说的清楚么
追问
defaul不是已经是所有条件不满足以后才走的吗?难道是先运行了default再运行case1?
追答
只要满足条件了,就会顺序走该switch中的所有case,default其实也相当于是一个特殊的case
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
switch(a)里面的default后面没有break,所以执行完default里的语句后没有跳出选择,继续执行下面的代码,知道遇到break为止。
顺序为switch(a)里的default,switch(b)里的default,执行s+=2,break跳出switch(b),进入swit(a)的case 1,执行s+=3,break跳出switch(a),打印输出s
顺序为switch(a)里的default,switch(b)里的default,执行s+=2,break跳出switch(b),进入swit(a)的case 1,执行s+=3,break跳出switch(a),打印输出s
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询