我遇到了一个奇怪的问题。我有一个案例陈述,根本没有输入。我已经使用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;
导致问题吗?我不认为这是因为我在没有它们的情况下尝试了它并且得到了相同的结果。
对于长代码和问题,我们深表歉意。感谢您的任何指导。
答案 0 :(得分:4)
如果Eclipse没有符合要求,那么源代码可能与Eclipse编译的代码不同步。
尝试做一个干净的&amp;新建。
重新启动Eclipse或重新导入项目也可能会有所帮助。
答案 1 :(得分:2)
最可能的解释是您没有调试您认为的编译代码。当您使用新源运行稍微旧的类时,您可以看到的是源是正确且最新的,但编译后的代码将跳到旧的行号,这看起来是正确的。
我会尝试做尽可能干净的构建。如果这不起作用,请尝试移动代码。例如添加大量空白行。