Java | break 文の使い方

Java Java
スポンサーリンク

break 文を超やさしく初心者向け詳解

break はループ処理でよく使う「抜け道」みたいな命令です。ここでは初心者にやさしく、具体例・出力・逐次実行の説明つきでじっくり解説します。


1) break のイメージ(超かんたん)

  • ループ(for / while / do-while)の中で使うと、**「そこでループを終わらせて、ループのあと(次の処理)に進む」**命令です。
  • たとえば「ある値が見つかったらもう調べる必要はない → すぐに抜ける」ときに使います。

2) 基本の書き方(例と実行の流れ)

例 A:for で最初に 7 を見つけたら抜ける

public class BreakExampleA {
    public static void main(String[] args) {
        int[] nums = {2, 5, 7, 3, 9};
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 7) {
                System.out.println("見つけた! index = " + i);
                break; // ここでループ終了
            }
            System.out.println("チェック中: " + nums[i]);
        }
        System.out.println("ループの後の処理へ");
    }
}
Java

出力

チェック中: 2
チェック中: 5
見つけた! index = 2
ループの後の処理へ

逐次実行の説明

  1. i=0nums[0] は 2。条件(==7)に合わない → System.out を表示 → 次の i
  2. i=1 → 5。合わない → 表示。
  3. i=2 → 7。条件が真 → 「見つけた!」を表示 → break 実行 → ループを即終了 → ループ下の ループの後の処理へ を実行。

例 B:while(true)(無限ループ)+break で終了

public class BreakExampleB {
    public static void main(String[] args) {
        int i = 0;
        while (true) {          // 無限ループ
            if (i >= 3) {
                break;          // i が 3 以上になったら抜ける
            }
            System.out.println("i = " + i);
            i++;
        }
        System.out.println("終了 (i=" + i + ")");
    }
}
Java

出力

i = 0
i = 1
i = 2
終了 (i=3)

ポイント:無限ループにすることで「条件は中で判断して break で抜ける」書き方ができます。リトライ処理などでも役立ちます。


3) ネスト(入れ子)されたループと break の挙動

例 C:内側の for で break するとどうなるか

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 5; j++) {
        if (j == 3) {
            break; // 内側のループ j を抜けるだけ
        }
        System.out.println("i=" + i + " j=" + j);
    }
    System.out.println("外側ループの次の繰り返しへ (i=" + i + ")");
}
Java

出力(意図)

i=1 j=1
i=1 j=2
外側ループの次の繰り返しへ (i=1)
i=2 j=1
i=2 j=2
外側ループの次の繰り返しへ (i=2)
i=3 j=1
i=3 j=2
外側ループの次の繰り返しへ (i=3)

説明breakその break が書かれたループ(ここでは内側の j ループ)だけを抜けます。外側 i ループは継続します。


4) ラベル付き break(外側ループまで一気に抜けたいとき)

ラベルをつけると「外側の指定したループまで抜ける」ことができます。ただし可読性を下げることがあるので注意して使います。

Outer:
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 5; j++) {
        if (i * j > 6) {
            break Outer; // Outer ラベルのついたループ(外側)を抜ける
        }
        System.out.println("i=" + i + " j=" + j);
    }
}
System.out.println("両方のループを抜けた後");
Java

挙動i * j > 6 が真になった瞬間に、内側も外側も含めて Outer が指すループを抜け、ラベル外の処理に進みます。


5) よくある使いどころ(実務的な例)

  • 「配列やリストで特定の値を見つけたら調べるのをやめる」
  • 「ユーザーの入力を検証して、条件を満たしたらループを終える」
  • 「無限ループでリトライ処理を行い、成功したら break で抜ける」

6) 注意点・アンチパターン

  • break を多用すると処理の流れが追いにくくなる(可読性が落ちる)。
  • 複雑なネストでラベル付き break を多用するとバグの温床になりやすい。代わりにメソッドに分ける、フラグ変数を使う、を検討。
  • break のせいで初期化や後処理(リソース開放等)が飛ばされないか確認する(finallytry-with-resources を考慮)。

7) 練習問題(ステップ解答付き)

問題1(基礎)

配列 int[] a = {4, 8, 6, 2, 5} から最初に奇数(odd number)を見つけて、その値を表示してループを終えるプログラムを書け。

解答

int[] a = {4, 8, 6, 2, 5};
for (int i = 0; i < a.length; i++) {
    if (a[i] % 2 == 1) { // 奇数なら
        System.out.println("最初の奇数: " + a[i]);
        break;
    }
}
Java

出力最初の奇数: 5(配列中の最初の奇数は 5)

解説:配列を先頭からチェックして、% 2 == 1(奇数)を満たしたら break で終了。


問題2(やや応用)

無限ループ内で、0 〜 9 の乱数を作り、5 が出たら「見つかった」と表示して抜けるコードを書け。(※ java.util.Random を使う)

解答

import java.util.Random;

Random rnd = new Random();
while (true) {
    int n = rnd.nextInt(10); // 0〜9
    System.out.println("生成: " + n);
    if (n == 5) {
        System.out.println("5 を見つけたので終了");
        break;
    }
}
Java

注意:無限ループなので、必ず条件で break できるようにする。


問題3(ラベル付き break の理解)

次のコードが何を出力するか予想せよ。

Outer:
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 4; j++) {
        if (i + j > 4) {
            break Outer;
        }
        System.out.println(i + "," + j);
    }
}
System.out.println("終了");
Java

解答と説明

  • i=1, j=11+1=2 ≤ 4 → 出力 1,1
  • i=1, j=21+2=3 ≤ 4 → 出力 1,2
  • i=1, j=31+3=4 ≤ 4 → 出力 1,3
  • i=1, j=41+4=5 > 4 → break Outer が実行 → 外側ループも抜ける → 終了 を出力

従って出力

1,1
1,2
1,3
終了

8) デバッグのコツ(初心者向け)

  • break の行に来たか確認したいときは、その直前に System.out.println("ここに来た") を入れてみる。
  • ネストしているときに「どのループを抜けているかわからない」場合、ラベルやログで明示する(ただしラベル乱用は避ける)。
  • ループ後に期待した初期化や後処理(例:ファイルの close)があるなら、break を使ってもそれを実行できるように try/finallytry-with-resources にする。

まとめ(覚えておくこと)

  • break は「その場でループを終わらせる」ための命令。
  • 通常は内側のループだけを抜ける。外側まで抜けたいときはラベル付き break
  • 使いすぎに注意。読みやすいコード設計を優先する。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました