黑马程序员技术交流社区

标题: 走过,路过,都来看看。 [打印本页]

作者: 吴文彬    时间: 2013-5-13 18:06
标题: 走过,路过,都来看看。
本帖最后由 吴文彬 于 2013-5-13 18:51 编辑

public class SwitchTest {
    public static void main(String[] args) {
        System.out.print(switchIt(2));
    }
    public static int switchIt(int x) {
        int j = 1;
        switch (x) {
            case 1: j++;
            case 2: j++;
            case 3: j++;
            default: j++;
        }
        return j + x;
    }
}
答案是 6. 我调试了下,为什么那个switch直接从case 2那个地方开始执行的,不是应该从case 1 那里开始顺序执行,然后比较是否相当吗。
作者: 王林涛    时间: 2013-5-13 18:14
运行结果为6,程序没有错误,你是拿什么工具进行调试的?eclipse?

7%RELP3}BTD3XJAC3)EO](L.jpg (10.73 KB, 下载次数: 0)

7%RELP3}BTD3XJAC3)EO](L.jpg

作者: 翟宝海    时间: 2013-5-13 18:17
Switch语句是选择语句,遇到匹配的case值,就执行该case值后面的语句,如果该匹配的case没有对应的break,程序就会继续向下执行(这时不再考虑case值匹配与否),运行可以执行的语句,直到遇到break或者switch结尾结束。
显然case1的值 1 与传入的的参数 2 不匹配,所以不执行case1,而是遇到匹配的case2之后,执行case2后面的语句;又因为没有遇到break,所以一直执行直到switch语句结束,这时j的值为4,加上x的值2,结果为6。
作者: yedong07a    时间: 2013-5-13 18:24
本帖最后由 yedong07a 于 2013-5-13 18:25 编辑

首先,你的输出语句打印switchIt()方法传的值是2,
public static int switchIt(int x){}的形式参数x是2,
然后switch的case1没有break作为中断,顺序执行。

作者: 小陈期待逆袭    时间: 2013-5-13 18:38
该程序的执行顺序是:
先判断case1 传入的值2不等于1,执行语句执行不到;
再判断case2  传入的值等于2,执行里面的语句j自增变为2,但是没有碰到break,继续向下执行,运行所有可以执行的语句
直到遇到break或者Switch语句结束。此时j为4.
所以j+x=6.

作者: 吴文彬    时间: 2013-5-13 18:50
翟宝海 发表于 2013-5-13 18:17
Switch语句是选择语句,遇到匹配的case值,就执行该case值后面的语句,如果该匹配的case没有对应的break, ...

恩呢,正解。谢了。脑子短路了。
作者: 吴文彬    时间: 2013-5-13 18:50
小陈期待逆袭 发表于 2013-5-13 18:38
该程序的执行顺序是:
先判断case1 传入的值2不等于1,执行语句执行不到;
再判断case2  传入的值等于2,执 ...

谢了,正解。




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