ループ内にループがあり、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.
}
}
}
}
ラベル付きブレークの使用:
mainloop:
for(){
for(){
if (some condition){
break mainloop;
}
}
}
参照
ループにラベルを追加して、_labelled break
適切なループから抜け出すために:-
outer: for (...) {
inner: for(...) {
if (someCondition) {
break outer;
}
}
}
詳細については、次のリンクを参照してください。
その関数のコントロールをreturn
することができます。または、いbreak labels
アプローチ:)
for
ステートメントの後に別のコード部分がある場合、関数内のループをリファクタリングできます。
IMO、ブレークおよびコンティニューの使用は、読みやすさとメンテナンスに影響するため、OOPでは推奨されません。確かに、それらは便利な場合もありますが、一般的にはgotoスタイルのプログラミングの使用を奨励するため、それらを避けるべきだと思います。
どうやらこの質問のバリエーションがたくさん投稿されています。 ここ Peterは、ラベルを使用していくつかの良い使い方と奇妙な使い方を提供しました。
Javaのように見えますが、ラベル付きのブレークが進むべき道のようです(他の回答のコンセンサスに基づいて)。
しかし、多くの(ほとんどの?)他の言語、または制御フローのようなgoto
を避けたい場合は、フラグを設定する必要があります。
bool breakMainLoop = false;
for(){
for(){
if (some condition){
breakMainLoop = true;
break;
}
}
if (breakMainLoop) break;
}
ただ楽しみのために:
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]
初心者でも最適で簡単な方法:
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;
}
}