0Pricing
Java Academy · レッスン

ラベル付きbreak

外側のループを適切に終了します。

「ラベル付きbreak」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

ネストされたループの問題

通常の break で終了できるのは内側のループだけです。しかし、多くの場合は両方のループから同時に抜けたいことがあります。

グリッドから1つの値を検索する場面を考えてみましょう。値が見つかったら、内側のループだけでなく、すべての処理を停止したいはずです。

Java では、これをラベル付き breakで解決できます。

ラベルとは

ラベルとは、ループに付ける名前で、名前の後ろにコロンを置きます。

たとえば for ループの直前に outer: と書くと、そのループに「outer」という名前が付きます。

ラベルだけでは何も起こりません。break や continue と組み合わせることで役立ちます。

outer:
for (int i = 0; i < 3; i++) {
    // 'outer' is now a name for this loop
}

ラベル付き break の構文

break キーワードの後ろにラベル名を書きます。break outer;

これにより、ネストされたループの深い位置からでも、Java は outer という名前のループの外へ移動します。

内側と外側の両方のループが直ちに停止します。

break outer;  // exits the loop labeled 'outer'

ラベル付き break の動作

ここでは 3×3 のグリッドを検索します。行 2 の col 2 が見つかったら、外側のループから抜けます。

通常の break とは異なり、これにより両方のループが同時に停止します。

public class Main {
    public static void main(String[] args) {
        outer:
        for (int row = 1; row <= 3; row++) {
            for (int col = 1; col <= 3; col++) {
                if (row == 2 && col == 2) {
                    System.out.println("Found at " + row + "," + col);
                    break outer;
                }
            }
        }
        System.out.println("Search over");
    }
}

すべての処理が停止した理由

出力は「Found at 2,2」、続いて「Search over」でした。

break outer と指定したため、両方のループが終了しました。行 3 は一度も処理されていません。

通常の break では、内側のループだけを終了した後、行 3 へ進んでいたでしょう。

2つの break の比較

同じグリッドで、代わりに通常の break を使った場合を見てみましょう。

通常の break では内側のループだけから抜けるため、外側のループはすべての行を進み続けます。

public class Main {
    public static void main(String[] args) {
        for (int row = 1; row <= 3; row++) {
            for (int col = 1; col <= 3; col++) {
                if (row == 2 && col == 2) {
                    break;
                }
                System.out.println(row + "," + col);
            }
        }
    }
}

2次元配列の検索

実際の用途の1つは、行列の中から対象の値を見つけることです。

値が見つかったら、ラベル付き break によって検索全体をきれいに終了できます。

public class Main {
    public static void main(String[] args) {
        int[][] grid = {{1, 2}, {3, 9}, {5, 6}};
        int target = 9;
        search:
        for (int r = 0; r < grid.length; r++) {
            for (int c = 0; c < grid[r].length; c++) {
                if (grid[r][c] == target) {
                    System.out.println("At row " + r + " col " + c);
                    break search;
                }
            }
        }
    }
}

ラベルはループに付ける必要がある

ラベルは、その名前が付くループの直前に置きます。囲んでいるループに付いていないラベルへ break することはできません。

outer、rows、search のように、コードの意図が自然に伝わる明確な名前を選んでください。

意図が分かりにくい x: のような名前は避けましょう。

3段階のネスト

ラベルは、3つ以上のループがネストされている場合にも使えます。

ここでは、条件を満たしたときにラベル付き break で3つすべてのループから一度に抜けます。

public class Main {
    public static void main(String[] args) {
        done:
        for (int a = 1; a <= 2; a++) {
            for (int b = 1; b <= 2; b++) {
                for (int c = 1; c <= 2; c++) {
                    if (a + b + c == 4) {
                        System.out.println(a + "," + b + "," + c);
                        break done;
                    }
                }
            }
        }
    }
}

ラベル付き break が役立つ場合

ラベル付き break は、結果が見つかった瞬間に複数のループを中止する必要がある場合に効果を発揮します。

各レベルで確認する boolean found のような追加のフラグ変数を避けられます。

使いすぎなければ、検索ループを短く明確に保てます。

控えめに使う

強力な機能ですが、ラベルが多すぎるとコードを追いにくくなります。

ラベル付き break は、主に実際にネストされた検索で使いましょう。単純なループでは、通常の break のほうが明快です。

常に読みやすさを優先してください。

理解度チェック

ネストされたループでラベル付き break が何をするか考えてみましょう。

まとめ

ラベルはループに名前を付け、break label; はその名前付きループを終了して、その内側にネストされたすべてのループから抜けます。

これは、ネストされた検索全体を一度に停止するのに適しています。次は、ラベルと continue の組み合わせについて学びます。

よくある質問

「ラベル付きbreak」レッスンは無料ですか?

はい。「ラベル付きbreak」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「ラベル付きbreak」で何を学びますか?

外側のループを適切に終了します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ラベル付きbreak」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. breakとcontinue
  2. ラベル付きbreak
  3. ラベル付きcontinue
  4. スパゲッティな処理フローを避ける
← Java Academyに戻る