2

我遇到了一个奇怪的问题。我有一个案例陈述,根本没有被输入。我已经用 Eclipse 调试器逐步完成了它,它得到了上面的行,然后直接进入后面的行。它编译并运行没有错误。

这是一个总体大纲:

    for (int k = 0; k<9; k++) {
        System.out.println("Program is here - #1");
        doSomething();
        switch (switchcode) {

        case 1:
            switch (k) {

            case 1: case 2: case 3:
                doOneOneTwoThree(); //#2
                break;
            case 4: case 5: case 6:
                doOneFourFiveSix(); //#3
                break;
            default:
                System.err.println("error k defaulted in case 1");
                break;
            }
            break;
        case 2:
            switch (k) {

            case 1: case 2: case 3:
                doTwoOneTwoThree(); //#4
                break;
            case 4: case 5: case 6:
                doTwoFourFiveSix(); //#5
                break;
            default:
                System.err.println("error k defaulted in case 2");
                break;
            }
            break;
        default:
            System.err.println("error switchcode defaulted");
            break;
        }

        doSomethingElse();
    }

毫无疑问,我做错了什么,但我真的不知道到底是什么。是因为我在一个案例中打开了 k 吗?我以前做过,而且很成功,也许幸运的是。

在更大的 for 循环中嵌套 case 语句是否会导致问题?

我在四处研究时偶尔看到“分支预测失败”,我不知道那是什么,但它可能正在发生。

在默认情况下是否break;会导致问题?我不认为这是因为我在没有他们的情况下尝试过并且得到了相同的结果。

对不起,长代码和问题。感谢您的任何指导。

4

2 回答 2

4

如果 Eclipse 没有达到应有的效果,那么源代码可能与 Eclipse 编译的代码不同步。

尝试做一个干净和新的构建。

重新启动 Eclipse 或重新导入项目也可能会有所帮助。

于 2012-08-03T12:32:36.953 回答
2

最可能的解释是你没有调试你认为的编译代码。当您使用新源运行稍微旧的类时,您可以看到源将是正确的并且是最新的,但是编译后的代码将跳到看起来不错的旧行号。

我会尽量做干净的构建。如果这不起作用,请尝试移动代码。例如添加很多空行。

于 2012-08-03T12:33:00.877 回答