黑马程序员技术交流社区
标题:
关于swith语句相关问题
[打印本页]
作者:
任长存
时间:
2015-12-31 10:35
标题:
关于swith语句相关问题
int x = 2,y=3;
switch(x)
{
default:
y++;
case 3:
y++;
break;
case 4:
y++;
}
System.out.println("y="+y);
答案是5,我知道是case穿透的相关知识,
但是经过第一个语句 y是4
但第二个语句x不等于3啊,为什么还会执行呢?
作者:
Clouddd
时间:
2015-12-31 11:03
首先。。一般编程需要有个良好的编程习惯,所以一般来说default缺省语句放在最后。
其次,代码是一行一行往下执行的,由于你把default写在头,而且最重要是没有break语句,所以,java把default和case3看成了是用一个代码库,就等于是
{
default:
y++;
case 3:
y++;
break;
}
程序第一次就来值就直接走了default,然后你没有写break,所以程序感觉case3也是default的一部分,所以不需要判断x是不是等于3,直接再走了一次y++;
所以应该把default放在代码最后面,但是这样改还不够,由于你case4里面也没写break语句,所以当你将default放在最后面,当x=4的时候,y也会等于5.
所以你要明白代码是一行一行往下执行,其次编程要严谨,当进入了一个case语句后就应该有终止语句break,不然代码会一直往下走,不会跳出知道代码结束完或者遇到终止语句。
遇到这种问题,以后当你使用eclipse的时候自己可以断点看程序怎么走的。目前学习阶段还是用文本直接写代码好
作者:
Hi刘腾
时间:
2015-12-31 12:02
第一、switch语句执行流程:
1:首先计算表达式的值。
2:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。
3:如果没有匹配,就执行default的语句体。
第二、switch语句的结束条件:
1:遇到break就结束
2:执行到末尾就结束
第三、default语句的作用:
1:如果所有的情况都不匹配,就执行default,相当于if语句中的else
2.default不一定要在最后,可以在任意位置。但是建议在最后。
int x = 2;
由于switch语句中没有与之匹配的case值,所以就执行到了default语句中,y++就成了4.
由于default语句中没有“break;”,所以就形成了穿透,直接穿透到了“case3”中,y++就成了5,遇到break就结束了。
所以,最后打印y的值就成了5
希望能帮到楼主
作者:
1158147908
时间:
2015-12-31 20:56
因为执行完default后没有break呀。所以会继续执行,直到遇到break
作者:
chengz
时间:
2015-12-31 21:13
楼上的大神解释的好
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2