質問

可能な複製:
ダブル/ネストされたループでメイン/アウターループから侵入する方法は?

私には次の状況があります:

      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 ;

                }
            }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top