A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝九凤 中级黑马   /  2014-7-19 13:56  /  8522 人查看  /  32 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       
        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呢?

32 个回复

倒序浏览
case 4:
                        y+=4;
                case 5:
                        y+=5;
以上俩句代码得到执行。num=4,case 4匹配上,进入执行,一直到break跳出,没有break就一直往下执行。
所以答案为9
回复 使用道具 举报
如果没有break;的话,会从对应的case开始执行,一直到最后。所以执行了 case 4:   y+=4; case 5:   y+=5;
回复 使用道具 举报
往下走呗
回复 使用道具 举报
执行了case5
回复 使用道具 举报
```````这个技术分在问这个问题,得深究
回复 使用道具 举报
签发 中级黑马 2014-7-19 16:16:24
7#
没有break会从case4开始执行,case5也会执行。所以结果是9
回复 使用道具 举报
你的y初始值是0,然后开始匹配~走到case 4: 的时候执行了y+=4;~然后依次执行后面的所有语句,并且不判断case后面的值~所以就等于9了
回复 使用道具 举报
没有break的话,程序会从找到的那个开始一直往下运行,如果都找不到就从default那开始从上往下运行,没有default,就从第一个一直往下运行,一直到找到break,或者读完。
回复 使用道具 举报
如果不写break语句,会发生case穿透,代码中num的值为4,所以,switch语句会找到case4开始执行,y的值为0;如果case4 :y+=4;break;则输出y的值为4,当case4没有break语句就会接着执行case5,直到遇到break或者“}”结束switch语句。
回复 使用道具 举报
孤守星空 发表于 2014-7-19 16:12
```````这个技术分在问这个问题,得深究

额 哈哈
回复 使用道具 举报
Adjin 中级黑马 2014-7-20 09:32:38
12#
结束程序没有碰见break;它就一直走,直到出现}
回复 使用道具 举报
因为没有break 跳出,所以 执行完了+4,顺便把剩下的句子也执行了一遍。所以,后面的y+=5也执行了!
回复 使用道具 举报
Imp_x 高级黑马 2014-7-20 22:56:04
14#
我能说楼猪水得一手好经验么:P
回复 使用道具 举报
就不会停!
回复 使用道具 举报
学习学习
回复 使用道具 举报
Whero 中级黑马 2014-7-21 09:07:18
17#
从都执行到尾
回复 使用道具 举报
一般需要在每个case后面都加break,防止出现case穿透现象。此代码的num = 4,那么程序会找到case 4:,依次向下执行,直到找到一个case里面有break的结束执行。中间case语句中的代码依次穿透,都会执行。在有些事务处理场景,我们还可以利用这种穿透现象,给一个相同情况的处理分组。供参考吧。
回复 使用道具 举报
一直往下执行执行执行,执行到程序结束,,, 这问题不应该还问的吧
回复 使用道具 举报
楼主所谓的break的问题,就跟default位置不放在最后是同一个思想。这里说说default和break的一些知识点吧。
  1. 1、default语句是switch语句判断完case语句后不满足条件才执行的,所以无论default放在什么位置,switch最后才执行default;
  2. 2、switch语句是自然顺序从小到大执行case语句的;switch(int num)中的参数满足case num,就只执行case语句,都不满足就执行default语句;
  3. 3、一般情况下,我们都习惯把default放在最后,但是如果default不在最后而是放在case语句中间或者句首的位置,是否有区别呢?这个需要看default语句末尾处是否加了break。加了,执行default语句的时候,遇到break会正常跳出switch;如果没有加,执行完default语句后会继续执行它下面的case语句直到遇到break或者 “}”结束。
  4. 4、所以,在用switch语句时,最好的办法就是每一句case和default语句后面都加上break。
  5. 5、break就像一个终止符,不加程序就会继续执行,知道遇见终止符才停止。
复制代码

所以,楼主的答案为9,并不奇怪!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马