java switch语句这个输出为什么不是2而是5?求指点

 我来答
冰火两重天
2014-06-05 · TA获得超过1425个赞
知道小有建树答主
回答量:1489
采纳率:0%
帮助的人:997万
展开全部

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

鸿渺shadow
2014-06-05 · TA获得超过196个赞
知道小有建树答主
回答量:108
采纳率:100%
帮助的人:80.1万
展开全部
switch(b):default:的break;只break掉了switch(b),switch(a)继续顺序执行,也就是case 1:的部分也会被执行。所以s=0+2+3=5

你在程序中设个断点,跟踪一下就了解了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
善学善思善行
2014-06-05
知道答主
回答量:14
采纳率:0%
帮助的人:4.6万
展开全部
因为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为止 。不知道我说的清楚么
追问
defaul不是已经是所有条件不满足以后才走的吗?难道是先运行了default再运行case1?
追答
只要满足条件了,就会顺序走该switch中的所有case,default其实也相当于是一个特殊的case
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjgzhengxian
2014-06-05 · TA获得超过1276个赞
知道小有建树答主
回答量:736
采纳率:100%
帮助的人:377万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式