ネストされたループの破損[重複
-
30-09-2019 - |
質問
私には次の状況があります:
for(int i = 0; i < schiffe.length-1; i++){
if(schiffe[i].schaden){
schlepper.fliege(schiffe[i].x,
schiffe[i].y,
schiffe[i].z);
schlepper.wirdAbgeschleppt = schiffe[i];
for(int k = 0; k < stationen.length-1; k++){
if(stationen[k].reparatur == null){
schlepper.fliege(stationen[k].x,
stationen[k].y,
stationen[k].z);
break;
}
}
}
}
したい
schlepper.fliege(stationen[k].x,
stationen[k].y,
stationen[k].z);
一度実行してから、内側のループから抜け出して、for(int i ... loop。したがって、コードにブレークを使用しました。しかし、これが正しいかどうかは本当にわかりません。すべてのループに対して、または2番目のループ用ですか?
解決
それは内側のループのみを壊し、したがってあなたが望むことをします。 Javaでは、複数のレベルを破るには、次のような「ラベル付けされたブレーク」を使用できます。
schiffe_loop:
for(int i = 0; i < schiffe.length-1; i++){
some_stuff();
for(int k = 0; k < stationen.length-1; k++){
if (something_really_bad_happened()) {
break schiffe_loop;
}
}
}
しかし、通常、あなたはこれを必要としません。
とにかく、内側のループに個別の方法を作成することを検討することができます。それはあなたが簡単に名前を与えることができるものです(「find_available_station」など)、そしておそらくどこか別の場所が必要です。
また、今すぐループが各配列の最後の要素を見逃すことに注意してください。 <=;の代わりに<を使用している理由について慎重に考えてください。それはまさにあなたが0から0からすべての値を使用するようにするためです しかし、含まれていません 指定されたもの。
他のヒント
break
あなたの場合は2番目のループで最も内側のループを壊します。
外側のループを破るには、ラベル付きブレークを次のように使用できます。
OUTER:for(...) {
for(...) {
break OUTER;
}
}
break
最も内側のループから抜け出すだけです。
休憩は最も近いループのみのためにブレークを引き起こします(2番目のループ)
2番目のもの。もちろん、「goto」を使用できます。
BREAKステートメントは、多くの言語で表示される最も近い囲まれたループまたはスイッチステートメントを終了しますが、試して、100%を確認することができます。
内側の2つのループを関数に入れて、リターンを使用して両方から抜け出します。
さらにコントロールが必要な場合は、ラベル付きブレークを使用できます。より詳しい情報 ここ. 。他の人が言ったように、Breakは最も近いループを閉じます。
「Found」と呼ばれ、このように使用するブール値を使用するのはどうですか:
while(!found) {
for(...) {
//todo
}
}
もう1つできることができると思います。
for(int k = 0; k <stattation.length-1; k ++){if(stattaten [k] .reparatur == null){schlepper.fliege(stattaten [k] .x、dtationen [k] .y、distenen [k] .z);
k = stationen.length + 1 ;
}
}