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
ループの後の処理へ
逐次実行の説明
i=0→nums[0]は 2。条件(==7)に合わない →System.outを表示 → 次のi。i=1→ 5。合わない → 表示。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のせいで初期化や後処理(リソース開放等)が飛ばされないか確認する(finally、try-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=1→1+1=2≤ 4 → 出力1,1i=1, j=2→1+2=3≤ 4 → 出力1,2i=1, j=3→1+3=4≤ 4 → 出力1,3i=1, j=4→1+4=5> 4 →break Outerが実行 → 外側ループも抜ける →終了を出力
従って出力
1,1
1,2
1,3
終了
8) デバッグのコツ(初心者向け)
breakの行に来たか確認したいときは、その直前にSystem.out.println("ここに来た")を入れてみる。- ネストしているときに「どのループを抜けているかわからない」場合、ラベルやログで明示する(ただしラベル乱用は避ける)。
- ループ後に期待した初期化や後処理(例:ファイルの close)があるなら、
breakを使ってもそれを実行できるようにtry/finallyやtry-with-resourcesにする。
まとめ(覚えておくこと)
breakは「その場でループを終わらせる」ための命令。- 通常は内側のループだけを抜ける。外側まで抜けたいときはラベル付き
break。 - 使いすぎに注意。読みやすいコード設計を優先する。
