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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴文彬 中级黑马   /  2013-5-13 18:06  /  1730 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴文彬 于 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 那里开始顺序执行,然后比较是否相当吗。

8 个回复

倒序浏览
运行结果为6,程序没有错误,你是拿什么工具进行调试的?eclipse?

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

7%RELP3}BTD3XJAC3)EO](L.jpg
回复 使用道具 举报
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:25 编辑

首先,你的输出语句打印switchIt()方法传的值是2,
public static int switchIt(int x){}的形式参数x是2,
然后switch的case1没有break作为中断,顺序执行。
回复 使用道具 举报
该程序的执行顺序是:
先判断case1 传入的值2不等于1,执行语句执行不到;
再判断case2  传入的值等于2,执行里面的语句j自增变为2,但是没有碰到break,继续向下执行,运行所有可以执行的语句
直到遇到break或者Switch语句结束。此时j为4.
所以j+x=6.
回复 使用道具 举报
翟宝海 发表于 2013-5-13 18:17
Switch语句是选择语句,遇到匹配的case值,就执行该case值后面的语句,如果该匹配的case没有对应的break, ...

恩呢,正解。谢了。脑子短路了。
回复 使用道具 举报
小陈期待逆袭 发表于 2013-5-13 18:38
该程序的执行顺序是:
先判断case1 传入的值2不等于1,执行语句执行不到;
再判断case2  传入的值等于2,执 ...

谢了,正解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马