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 に答える