Javaで多重ループを一気に抜けるbreak文の使い方【ラベルを使ってスッキリ制御】

こんにちは。ゆうせいです。

今回は、「多重ループを一発で抜けたい!」というときに便利な、Javaのbreak文の使い方についてお話しします。特に、2重・3重のループを一気に抜けたいときにどうするか?を丁寧に解説していきます。

「breakって1個のループしか抜けられないんじゃないの?」と感じた方も多いのではないでしょうか?
実は、「ラベル付きbreak文」を使えば、複数階層のループを一発で抜けることができるんです!


多重ループとは?

まずは前提を確認しておきましょう。

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        // 何か処理
    }
}

こういった、ループの中にさらにループがある構造を「多重ループ(ネストされたループ)」と呼びます。

たとえば、ある条件に合致したら、内側のループだけでなく、外側のループもまとめて抜けたいことがありますよね。


通常のbreak文ではどうなる?

まずは普通のbreakを使った例です。

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        if (j == 2) {
            break;
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}

この場合、j == 2になると内側のループだけを抜けて、外側のループ(iのループ)は続行されます。

つまり、「全部抜けたい」という目的には合いません。


ラベル付きbreak文の登場!

Javaには、ループに「ラベル」を付けて、そのラベル付きループをbreakで抜けるという技があります。

書き方

ラベル名: for (...) {
    for (...) {
        if (条件) {
            break ラベル名;
        }
    }
}

実際のコード

outerLoop: // ラベルを付ける
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        if (i == 2 && j == 2) {
            break outerLoop; // 外側のループまで一気に抜ける
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}

実行結果(抜粋)

i=0, j=0
i=0, j=1
i=0, j=2
...
i=2, j=1

i=2, j=2に到達したら、内側も外側もまとめて終了しました!

メリットとデメリット

項目内容
メリット多重ループをすっきり制御できる
メリット無駄なフラグ変数がいらない
デメリットラベル構文は慣れないと読みにくい
デメリット濫用するとスパゲッティコードになりやすい

こんなときに使おう!

  • ネストが深くて条件に合致したらすぐにすべて終了したいとき
  • 内側ループの終了だけでは処理が正しく続けられないとき

おすすめしないケース

  • 条件が複雑ではない場合
  • 単純に内側だけ抜ければ済む処理
  • 可読性が最優先される場面(レビューで指摘されることも)

まとめと次のステップ

ラベル付きbreak文を使うことで、多重ループから一気に脱出できるのがJavaの特徴です!

ただし、コードの可読性にも注意しながら使いましょう。

次のステップとしては、

  • continue文にもラベルをつけられるって知ってましたか?
  • Javaでの「ループ制御構文」をマスターして、もっとスマートに書けるようになりましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。