39

ループ内にループがあり、ifステートメントが満たされたらメインループを解除したい場合、どうすればよいですか?

これは私のコードです:

for (int d = 0; d < amountOfNeighbors; d++) {
    for (int c = 0; c < myArray.size(); c++) {
        if (graph.isEdge(listOfNeighbors.get(d), c)) {
            if (keyFromValue(c).equals(goalWord)) { // Once this is true I want to break main loop.
                System.out.println("We got to GOAL! It is "+ keyFromValue(c));
                break; // This breaks the second loop, not the main one.
            }
        }
    }
}
4

6 に答える 6

61

ラベル付きブレークの使用:

mainloop:
for(){
 for(){
   if (some condition){
     break mainloop;
   }
  }
}

も参照してください

于 2012-10-25T16:44:11.927 に答える
28

ループにラベルを追加し、それを使用しlabelled breakて適切なループから抜け出すことができます。

outer: for (...) {
    inner: for(...) {
        if (someCondition) {
            break outer;
        }
    }
}

詳細については、次のリンクを参照してください。

于 2012-10-25T16:44:03.770 に答える
12

あなたはその機能からただreturnコントロールすることができます。または醜いbreak labelsアプローチを使用してください:)

forステートメントの後に別のコード部分がある場合は、関数内のループをリファクタリングできます。

IMO、ブレークとコンティニューの使用は、読みやすさとメンテナンスに影響を与えるため、OOPでは推奨されません。もちろん、便利な場合もありますが、gotoスタイルのプログラミングの使用を促進するので、一般的には避けるべきだと思います。

どうやらこの質問のバリエーションがたくさん投稿されています。ここで、ピーターはラベルを使用していくつかの良い使用法と奇妙な使用法を提供しました。

于 2012-10-25T16:45:03.787 に答える
3

Javaの場合、(他の回答のコンセンサスに基づいて)ラベル付きのブレークが進むべき道のように見えます。

しかし、他の多くの(ほとんど?)言語の場合、またはgoto同様の制御フローを避けたい場合は、フラグを設定する必要があります。

bool breakMainLoop = false;
for(){
    for(){
        if (some condition){
            breakMainLoop = true;
            break;
        }
    }
    if (breakMainLoop) break;
}
于 2012-10-25T20:55:34.210 に答える
2

楽しみのためだけに:

for(int d = 0; d < amountOfNeighbors; d++){
    for(int c = 0; c < myArray.size(); c++){
        ...
            d = amountOfNeighbors;
            break;
        ...
    }
    // No code here
}

コメントbreak label:それは前向きな後藤です。ステートメントを壊して次のステートメントにジャンプする可能性があります。

foo: // Label the next statement (the block)
{
    code ...
    break foo;  // goto [1]
    code ...
}

//[1]
于 2012-10-25T16:54:28.763 に答える
0

初心者にとっても最良で簡単な方法:

outerloop:

for(int i=0; i<10; i++){

    // Here we can break the outer loop by:
    break outerloop;

    innerloop:

    for(int i=0; i<10; i++){

        // Here we can break innerloop by:
        break innerloop;
    }
}
于 2015-08-23T21:10:47.563 に答える