黑马程序员技术交流社区
标题:
switch语句没写break跳出循环会怎样?
[打印本页]
作者:
郝九凤
时间:
2014-7-19 13:56
标题:
switch语句没写break跳出循环会怎样?
int num = 4;
int y = 0;
switch(num) {
case 1:
y++;
case 2:
y+=2;
case 3:
y+=3;
case 4:
y+=4;
case 5:
y+=5;
}
System.out.println(y);
请问case5会执行吗?结果怎么会是9呢?
作者:
李云贵
时间:
2014-7-19 14:03
case 4:
y+=4;
case 5:
y+=5;
以上俩句代码得到执行。num=4,case 4匹配上,进入执行,一直到break跳出,没有break就一直往下执行。
所以答案为9
作者:
Blake
时间:
2014-7-19 15:32
如果没有break;的话,会从对应的case开始执行,一直到最后。所以执行了 case 4: y+=4; case 5: y+=5;
作者:
阳光的嘉主角
时间:
2014-7-19 15:47
往下走呗
作者:
微笑女皇
时间:
2014-7-19 15:52
执行了case5
作者:
孤守星空
时间:
2014-7-19 16:12
```````这个技术分在问这个问题,得深究
作者:
签发
时间:
2014-7-19 16:16
没有break会从case4开始执行,case5也会执行。所以结果是9
作者:
as_heima
时间:
2014-7-19 19:41
你的y初始值是0,然后开始匹配~走到case 4: 的时候执行了y+=4;~然后依次执行后面的所有语句,并且不判断case后面的值~所以就等于9了
作者:
chulangren2
时间:
2014-7-19 21:10
没有break的话,程序会从找到的那个开始一直往下运行,如果都找不到就从default那开始从上往下运行,没有default,就从第一个一直往下运行,一直到找到break,或者读完。
作者:
新语新空
时间:
2014-7-19 21:22
如果不写break语句,会发生case穿透,代码中num的值为4,所以,switch语句会找到case4开始执行,y的值为0;如果case4 :y+=4;break;则输出y的值为4,当case4没有break语句就会接着执行case5,直到遇到break或者“}”结束switch语句。
作者:
想做开发
时间:
2014-7-19 21:26
孤守星空 发表于 2014-7-19 16:12
```````这个技术分在问这个问题,得深究
额 哈哈
作者:
Adjin
时间:
2014-7-20 09:32
结束程序没有碰见break;它就一直走,直到出现}
作者:
huanglyhf
时间:
2014-7-20 16:25
因为没有break 跳出,所以 执行完了+4,顺便把剩下的句子也执行了一遍。所以,后面的y+=5也执行了!
作者:
Imp_x
时间:
2014-7-20 22:56
我能说楼猪水得一手好经验么:P
作者:
曾翀
时间:
2014-7-21 08:22
就不会停!
作者:
阿磊
时间:
2014-7-21 08:56
学习学习
作者:
Whero
时间:
2014-7-21 09:07
从都执行到尾
作者:
刘卫强
时间:
2014-7-21 17:33
一般需要在每个case后面都加break,防止出现case穿透现象。此代码的num = 4,那么程序会找到case 4:,依次向下执行,直到找到一个case里面有break的结束执行。中间case语句中的代码依次穿透,都会执行。在有些事务处理场景,我们还可以利用这种穿透现象,给一个相同情况的处理分组。供参考吧。
作者:
高老强
时间:
2014-7-21 17:50
一直往下执行执行执行,执行到程序结束,,, 这问题不应该还问的吧
作者:
⋛⋌⋚JEEP
时间:
2014-7-21 17:53
楼主所谓的break的问题,就跟default位置不放在最后是同一个思想。这里说说default和break的一些知识点吧。
1、default语句是switch语句判断完case语句后不满足条件才执行的,所以无论default放在什么位置,switch最后才执行default;
2、switch语句是自然顺序从小到大执行case语句的;switch(int num)中的参数满足case num,就只执行case语句,都不满足就执行default语句;
3、一般情况下,我们都习惯把default放在最后,但是如果default不在最后而是放在case语句中间或者句首的位置,是否有区别呢?这个需要看default语句末尾处是否加了break。加了,执行default语句的时候,遇到break会正常跳出switch;如果没有加,执行完default语句后会继续执行它下面的case语句直到遇到break或者 “}”结束。
4、所以,在用switch语句时,最好的办法就是每一句case和default语句后面都加上break。
5、break就像一个终止符,不加程序就会继续执行,知道遇见终止符才停止。
复制代码
所以,楼主的答案为9,并不奇怪!
作者:
HPU--spring87
时间:
2014-7-21 22:24
没有break,就一直执行下去,就是9.:lol
作者:
chensuyu
时间:
2014-7-21 23:00
没有break当然会一直向下走啊,底下的判断也不用做了,直到遇见大括号或者其他结束语句,所以执行了 case 4: y+=4; case 5: y+=5;经过两次加的操作输出9
作者:
rolling-stone
时间:
2014-7-21 23:05
case4和case5执行,结果应该会是9
作者:
付士长
时间:
2014-7-22 00:22
首先switch是个选择语句,进入switch语句后,就会根据表达式的值去找对应的case值,你的初始值是4就去找case4了 ,没有break就会继续向下执行到case5,y+=4 就是y=y+4,y因为y初始值s是0,所以到case5时y=4,所以结果就会是9了!!!
作者:
楚风★憧憬
时间:
2014-7-22 00:24
它会从case1执行到case5 一直执行;
作者:
meibinlove
时间:
2014-7-22 08:17
没有break会一直从匹配的case执行一直到switch结束
作者:
陈新海1
时间:
2014-7-22 08:36
我很想知道这个贴,管理看到会不会加技术分
作者:
慕杰
时间:
2014-7-22 10:49
如果不写break的话,程序会一直从case5走到最后才停止的,所以结果会是9
作者:
dreamseekerkun
时间:
2014-7-22 11:55
学习中。。。。。。。。。
作者:
AEhaojiu
时间:
2014-7-22 11:58
没有break的话 switch直接跳转到case num的语句进行执行 然后接着执行后面语句 若没有case num则直接退出
作者:
波风梅西
时间:
2014-7-22 12:14
执行到符合条件后会一直执行到结束
作者:
爷丶 う
时间:
2014-7-22 12:47
没有 break 就会顺序往下执行,首先找到执行的入口, 再顺序执行到程序的末尾。
作者:
dingpanbo
时间:
2014-7-22 13:01
当case满足条件是,如果此时这个case中有break语句,就会执行完这个语句然后跳出switch
如果此时这个case中没有break语句,就会执行从这个语句到下面的语句,直到遇到break,或者执行到最后的语句为止。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2