2

重複の可能性:
Java でネストされたループから抜け出す

たとえば、疑似コードに示されているように、ポイント 1、2、および 3 で while ループの最初の行に戻るには、break および/または continue ステートメントを使用するにはどうすればよいですか?

次のようなシナリオがあるとします。

while(condition) {
    // want to return to this point
    for (Integer x : xs) {
        // point 1
        for (Integer y : ys) {
            // point 2
            ...
        }
        ...
    }
    for (Integer a : as) {
        for (Integer b : bs) {
            // point 3
            ...
        }
        ...
    }
}
4

6 に答える 6

5

次のようなラベルを使用します。

outer:
while(condition) {
// want to return to this point
for (Integer x : xs) {
    // point 1
    for (Integer y : ys) {
        // point 2
        ...
    }
    ...
}
for (Integer a : as) {
    for (Integer b : bs) {
        // point 3
        ...
    }
    ...
}

}

break outer;その後、whileループをエスケープするために使用できます。これはネストされたforループでも機能しますが、ラベルを使いすぎないようにしています

@Peterが指摘しているようcontinue outer;に、whileループをエスケープするのではなく、現在の外側の反復を早期に終了して次の反復に進む場合に使用します。

于 2012-12-12T16:39:58.403 に答える
2

構文でループにラベルを付ける

LABEL: LoopTypeその後、Break ステートメントを使用して、特定のループから抜け出すことができますbreak LABEL;

OUT: while(somecond){
IN:for(...) {
   INNER: for(...){
break IN;// will get you outta IN and INNER for loop
}
 }
}
于 2012-12-12T16:41:04.783 に答える
2
loop:
while(condition) {
// want to return to this point
for (Integer x : xs) {
    continue loop:
    for (Integer y : ys) {
        continue loop:
        ...
    }
    ...
}
for (Integer a : as) {
    for (Integer b : bs) {
        continue loop:
        ...
    }
    ...
}

}

于 2012-12-12T16:41:41.123 に答える
1

出来るよ :

here:
while(condition) {
   for (Integer x : xs) {
        // point 1
        for (Integer y : ys) {
            break here;
        }
    }

ラベルの有無にかかわらず、breakステートメントはJava仕様で説明されています

ラベルのないbreakステートメントは、制御を最も内側の囲んでいるスイッチに移そうとしますが、while、do、またはすぐに囲んでいるメソッドまたは初期化子のforステートメント。ブレークターゲットと呼ばれるこのステートメントは、すぐに正常に完了します。

ラベル識別子を持つbreakステートメントは、そのラベルと同じ識別子を持つ、それを囲むラベル付きステートメント(§14.7)に制御を移そうとします。ブレークターゲットと呼ばれるこのステートメントは、すぐに正常に完了します。この場合、ブレークターゲットは、switch、while、do、またはforステートメントである必要はありません。

于 2012-12-12T16:40:16.517 に答える
0

breakはい、次のラベルを付けてステートメントを使用できます。

SOME_LABEL:
   // ... some code here
   break SOME_LABEL;

控えめに使用すると、これは複数のネストされたループから抜け出すためのクリーンな方法です。

于 2012-12-12T16:39:57.343 に答える
0

ここに投稿されたように、stackoverflow.com/questions/886955/breaking-out-of-nested-loops-in-Java で同じ質問を処理できます。

于 2012-12-12T16:42:30.333 に答える