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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


第六题
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);
        }       
}

7 个回复

倒序浏览
本帖最后由 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

点评

赞  发表于 2014-9-17 21:18
回复 使用道具 举报
学习了   
回复 使用道具 举报
两个小程序的原因都是没有终止循环,建议楼主可以去了解下barak和continue关键字的用法
回复 使用道具 举报
楼上正解
回复 使用道具 举报
难道你的代码没有复制完?
回复 使用道具 举报
happymouse 发表于 2014-9-16 11:08
switch语句执行的特点是假如有语句匹配,将执行该句并且会不再判断并执行下面的语句(当然是没有break,有的 ...

恩呢,写的很仔细,终于看懂了!!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马