黑马程序员技术交流社区

标题: 关于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