Javaマルチループからジャンプする方法

5286 ワード


私たちは一般的にbreakとcuntinueで単一のループを制御しますが、次のような複数のループがある場合は、次のようにします.
for (int i=0; i<10; i++) {
            for (int j=0; j<10; j++) {
                for (int k=0; k<10; k++) {
                    
                  }
            }
        }

次のようなニーズがあれば、一般的にどうしますか?
(1)j+k>5ですべてのサイクルが終了する.
(2)j+k>5のときに最背面の2層サイクルを終了する.
(3)j+k>5で最背面のレイヤループを終了し、現在の第2のレイヤループをスキップするが、残りの第2のレイヤループを実行し続ける.
 
 
 
1、異常を投げてサイクル全体を飛び出す.
たとえば、j+k>5ですべてのループを終了する場合に使用します.
try{
            for (int i=0; i<10; i++) {
                for (int j=0; j<10; j++) {
                    for (int k=0; k<10; k++) {
                        if (j + k > 5){
                            throw new Exception();
                        }
                    }
                }
            }
        }
catch (Exception e) {    }

 
2、条件識別子を使用して循環を制御する
例えば、j+k>5で最背面の2層サイクルが終了すると、最初の方法はできません.この方法を使用します.
        boolean firstLoop = true;
        boolean secondLoop = true;
        boolean thirdLoop = true;
        
        for (int i=0; i<10; i++) {
            if (!firstLoop){
                break;
            }
            
            for (int j=0; j<10; j++) {
                if (!secondLoop){
                    break;
                }
                
                for (int k=0; k<10; k++) {
                    if (!thirdLoop){
                        break;
                    }
                    if (j + k > 5){
                        thirdLoop = false;
                        secondLoop = false;
                    }
                }
            }
        }
    

 
3、循環にタグを付けて、循環をより正確に制御する
例えば、j+k>5のときに最背面のレイヤループを終了し、現在の第2のレイヤループをスキップするが、残りの第2のレイヤループを実行し続ける.これは第2の方法でも実現できますが、コードがより複雑に見える可能性があります.3つ目の方法を使用すると、これを簡単に明らかにすることができます.コードは次の通りです(secondLoopはタグです).
for (int i=0; i<10; i++) {
            secondLoop:
            for (int j=0; j<10; j++) {
                for (int k=0; k<10; k++) {
                    if (j + k > 5){
                        continue secondLoop;
                    }
                }
            }
        }