黑马程序员技术交流社区

标题: 谁能解释一下这两个题答案---原来我连switch都没搞懂啊!!! [打印本页]

作者: zhiyuan0932    时间: 2014-9-16 10:31
标题: 谁能解释一下这两个题答案---原来我连switch都没搞懂啊!!!

第六题
int x = 2,y=3;

switch(x)
{
        default:
                y++;
        case 3:
                y++;
        case 4:
                y++;
}

System.out.println("y="+y);//y=6

class Demo
{
        public static void main(String[] args)
        {
                show(0);//15
                show(1);//14
        }       
        public static void show(int i)
        {
                switch(i)
                {       
                        default:
                                i+=2;
                        case 1:
                                i+=1;
                        case 4:
                                i+=8;                       
                        case 2:
                                i+=4;
                }
                System.out.println("i="+i);
        }       
}
作者: happymouse    时间: 2014-9-16 11:08
本帖最后由 happymouse 于 2014-9-16 11:40 编辑

switch语句执行的特点是假如有语句匹配,将执行该句并且会不再判断并执行下面的语句(当然是没有break,有的话就结束了)
当没有匹配值时,不管default放在什么位置,它总是在最后一个处理,然后继续向下处理,直到遇到第一个break结束。当有匹配值时,default假如放在匹配语句的前面,将不再执行,否则同样会执行,直到遇到第一个break结束
第一题:
其实执行了两遍,第一遍匹配执行的时候发现没有匹配值然后就去执行default语句,然后顺序执行default后面的语句,故结果是y=6
第二题:
show(0)
这个也没有匹配值,原因和第一题相同,故结果是i=15
show(1)
有匹配值,所以从匹配值处开始计算,但default语句在匹配语句前面,故不再执行,故结果是i=14

作者: haixiaoxiao    时间: 2014-9-16 14:28
学习了   
作者: 家进    时间: 2014-9-16 14:44
两个小程序的原因都是没有终止循环,建议楼主可以去了解下barak和continue关键字的用法
作者: xplcc    时间: 2014-9-16 14:57
楼上正解

作者: 海燕    时间: 2014-9-16 16:07
难道你的代码没有复制完?
作者: zhiyuan0932    时间: 2014-9-17 12:17
happymouse 发表于 2014-9-16 11:08
switch语句执行的特点是假如有语句匹配,将执行该句并且会不再判断并执行下面的语句(当然是没有break,有的 ...

恩呢,写的很仔细,终于看懂了!!:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2