Java超|break文のしくみ

必要なところで、きっぱり抜ける。
break文を覚えると、Javaの繰り返し処理を「最後まで走るだけ」ではなく、「目的を達したら撤収する流れ」として制御できる。

これまで、for文、while文、do~while文を使って、同じ処理を何度もくり返す方法を学んできました。

繰り返し処理はとても便利です。
決まった回数だけ表示する、条件が成り立つ間だけ続ける、まず1回実行してから続けるか判断するなど、いろいろな流れを書けるようになりました。

ただし、実際のプログラムでは、いつも最後まで繰り返せばよいとは限りません。

たとえば、10回まで確認する予定でも、5回目で目的のものが見つかったら、それ以上続ける必要はありません。
ある条件に達したら、その時点で処理を終えたほうが自然な場合もあります。
ユーザーが中止を選んだなら、すぐにループを抜けたいこともあります。

このような場面で使うのが break文 です。

break文は、ループの途中で実行されると、そのループをその場で終了し、ループの外側へ処理を移します。
もともとの繰り返し条件がまだ true であっても、break文が実行された時点で、繰り返しを打ち切れるのが大きな特徴です。

ドラゴンボール風にたとえると、break文は「任務を続ける必要がなくなった瞬間に、隊長が撤収の合図を出す札」です。

本来は10か所を巡回する予定でも、目的のエネルギー反応を5か所目で見つけたなら、それ以上巡回する必要はありません。
その場で撤収し、次の行動へ移る。

この「途中で切り上げる」動きをJavaで表すのが break文 です。

break文とは何か

break文は、現在実行しているループやswitch文などを、その場で終了させるための文です。

書き方はとてもシンプルです。

break;

この1文が実行されると、break文が含まれている繰り返し処理を抜けます。

たとえば、for文の中で break文 が実行されると、そのfor文はそこで終了します。
その後は、for文の外側にある次の処理へ進みます。

文・構文役割
break;実行中のループを途中で終了する
for文の条件式通常の繰り返し継続を判断する
if文breakするかどうかの条件判定によく使う

ここで大切なのは、break文は「プログラム全体を止める文」ではないということです。

break文は、ループを抜ける文です。
ループを抜けたあとは、ループの外側にある処理へ進みます。

ドラゴンボール風にたとえると、break文は「任務そのものを放棄する」のではありません。
「今行っている巡回を終えて、次の指令へ移る」ための合図です。

break文が必要になる場面

繰り返し処理は、通常は条件が false になるまで続きます。

たとえば、次のようなfor文なら、何も途中終了がなければ 1 から 10 まで処理が続きます。

for(int i = 1; i <= 10; i++){
    処理;
}

しかし、実際には途中で終わらせたい場面があります。

場面break文が役立つ理由
探していた値が見つかったそれ以上探し続ける必要がない
目的の回数に達した予定より早く切り上げたい
異常な状態を見つけたその場で処理を打ち切りたい
ユーザーが中止を選んだすぐにループを抜けたい
条件を満たす結果が出た続けるより抜けたほうが自然

break文は、「最後まで続けるより、途中で終えたほうが自然な処理」に向いています。

ドラゴンボール風にたとえると、10回の巡回予定があっても、5回目で目的のエネルギー反応を見つけたなら、残りの巡回は不要です。
そこで break文 によって、ループを抜けます。

break文の基本イメージ

break文は、if文と組み合わせて使うことが多いです。

なぜなら、途中で抜けるかどうかは、条件によって判断することが多いからです。

基本の形は次のようになります。

for(繰り返しの設定){
    処理;

    if(途中でやめたい条件){
        break;
    }
}

この流れでは、ふだんはループを続けます。
しかし、if文の条件が true になったときだけ break文 が実行され、ループを抜けます。

部分役割
for文繰り返し処理を行う
if文途中で終える条件を調べる
break文条件を満たしたらループを抜ける

break文は、条件に応じて繰り返しの流れを変えるための道具です。

ドラゴンボール風にたとえると、for文は「最大10地点まで巡回する予定」です。
if文は「目的の反応を見つけたか」を確認するスカウターです。
break文は「見つけたなら、そこで巡回を終える撤収命令」です。

図:break文はループを途中で抜ける

この図が示していること

この図では、break文がループを途中で終了させる流れを示しています。

for文は本来、i が 1 から 10 まで進む予定です。
しかし、i が stop と等しくなった時点で if文の条件が true になります。

そこで break文 が実行されると、for文の残りの処理は行われません。
i = 6 以降の繰り返しには進まず、for文の外側へ移動します。

ここから分かることは、break文を使うと、ループ本来の終了条件とは別に、途中終了のルールを作れるということです。

break文を確認する

ここでは、入力された回数になったら、お知らせ表示を途中で終了するプログラムを見ていきます。

ファイル名:Sample9.java

import java.io.*;

class Sample9
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("何回目で任務のお知らせを終了しますか?(1~10)");

        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();
        int stop = Integer.parseInt(str);

        for(int i = 1; i <= 10; i++){
            System.out.println(i + "回目の任務連絡を表示しています。");

            if(i == stop){
                break;
            }
        }

        System.out.println("任務連絡の表示を終了しました。");
    }
}

実行例です。
5 を入力した場合は、次のようになります。

何回目で任務のお知らせを終了しますか?(1~10)
5
1回目の任務連絡を表示しています。
2回目の任務連絡を表示しています。
3回目の任務連絡を表示しています。
4回目の任務連絡を表示しています。
5回目の任務連絡を表示しています。
任務連絡の表示を終了しました。

このプログラムでは、本来なら for文 によって 1回目から10回目まで表示する流れになっています。

for(int i = 1; i <= 10; i++)

ただし、ループの中で次のif文を使っています。

if(i == stop){
    break;
}

i が stop と等しくなったとき、break文 が実行されます。
その瞬間にfor文を抜けるため、残りの回数は表示されません。

ドラゴンボール風にたとえると、1回目から10回目まで任務連絡を送る予定でした。
しかし、隊長が指定した回数に達した時点で「ここで連絡終了」と合図を出します。

その合図が break文 です。

Sample9.java の処理の流れ

Sample9.java の処理は、次のように進みます。

順番処理内容
1何回目で終了するかを入力してもらう
2入力された文字列を整数に変換して stop に入れる
3for文で i を 1 から 10 まで進める
4毎回、任務連絡を表示する
5i == stop なら break文 を実行する
6for文を抜けて、終了メッセージを表示する

5 を入力した場合、stop の値は 5 です。

int stop = 5;

そのため、i が 5 になったときに、次の条件が true になります。

i == stop

そして、break文 が実行されます。

break;

この時点で for文 は終了します。
i が 6、7、8、9、10 になる処理は行われません。

5を入力した場合の動き

5 を入力した場合の動きを表で整理すると、次のようになります。

i の値表示される内容i == stopbreak文
11回目の任務連絡を表示false実行されない
22回目の任務連絡を表示false実行されない
33回目の任務連絡を表示false実行されない
44回目の任務連絡を表示false実行されない
55回目の任務連絡を表示true実行される
6以降表示されない確認されない実行されない

この表から分かるように、5回目で break文 が実行された時点で、for文の繰り返しは終わります。

つまり、for文の条件 i <= 10 だけを見ると、6回目以降も続けられるはずです。
しかし、break文 が実行されたため、その先の繰り返しには進みません。

ここが break文 の重要なところです。

break文がない場合との違い

もし Sample9.java に break文 がなければ、for文は i <= 10 が false になるまで続きます。

つまり、1回目から10回目まで全部表示されます。

状態ループの終了タイミング
break文がないfor文の条件が false になったとき
break文があるbreak文が実行されたとき

break文がない場合は、for文の終了条件だけがループを止める基準です。

for(int i = 1; i <= 10; i++)

この場合、i が 11 になり、i <= 10 が false になるまで続きます。

一方、break文がある場合は、途中終了のルールを追加できます。

if(i == stop){
    break;
}

この条件が true になった瞬間に、ループを抜けます。

ドラゴンボール風にたとえると、break文がない場合は、予定どおり10地点すべてを巡回します。
break文がある場合は、目的のエネルギー反応を見つけた時点で巡回を切り上げます。

図:break文がある場合とない場合の違い

この図が示していること

この図では、break文がない場合とある場合の違いを比較しています。

左側では、break文がないため、for文は i <= 10 が false になるまで続きます。
つまり、1回目から10回目まで実行されます。

右側では、stop が 5 のとき、i == stop が true になったタイミングで break文 が実行されます。
そのため、5回目でループを抜け、6回目以降は実行されません。

ここから分かることは、break文を使うと、本来のループ条件とは別に、途中終了のルールを作れるということです。

break文はループを抜ける命令

break文を見たときは、「ただ終わる」ではなく、「今いるループを抜ける」と考えると理解しやすいです。

Sample9.java では、break文 がfor文の中にあります。

for(int i = 1; i <= 10; i++){
    System.out.println(i + "回目の任務連絡を表示しています。");

    if(i == stop){
        break;
    }
}

この中で break文 が実行されると、for文の外へ出ます。

その後、次の文が実行されます。

System.out.println("任務連絡の表示を終了しました。");

つまり、処理の流れは次のようになります。

順番流れ
1for文の中で繰り返し処理を行う
2i == stop が true になる
3break文 を実行する
4for文を抜ける
5ループ外の終了メッセージへ進む

break文は、プログラムを完全に停止する文ではありません。
今いるループを抜けて、その外の処理へ進める文です。

ドラゴンボール風にたとえると、巡回任務を終えるだけで、戦士の行動すべてが止まるわけではありません。
巡回を終えたあと、次の指令へ進みます。

break文はif文と一緒に使うことが多い

break文は、単独で突然書くよりも、if文と組み合わせて使うことが多いです。

なぜなら、「いつ抜けるか」を条件で決めることが多いからです。

基本の形は次の通りです。

if(条件){
    break;
}

この形にすると、「この条件になったらループを終える」という意図がはっきりします。

Sample9.java では、次の条件を使っています。

if(i == stop){
    break;
}

これは、i が stop と等しくなったらループを抜ける、という意味です。

条件break文の動き
i == stop が falseループを続ける
i == stop が truebreak文を実行してループを抜ける

このように、break文は「途中終了の条件」とセットで読むと分かりやすくなります。

break文が実行されたあとの流れ

break文が実行されると、ループの中の処理はそこで終わります。

ただし、ループの外側にある処理は続きます。

Sample9.java では、break文 のあと、次の文へ進みます。

System.out.println("任務連絡の表示を終了しました。");

この文はfor文の外にあります。

そのため、stop が 5 でも、stop が 3 でも、break文でループを抜けたあとに実行されます。

文の位置実行されるタイミング
for文の中ループ中に実行される
break文条件を満たしたときにループを抜ける
for文の外ループ終了後に実行される

このように、break文は「処理を全部止める」のではなく、「今いるループから外へ出る」文です。

ネストしたループでのbreak文

for文などをネストしている場合、内側のループで break文 を使うことがあります。

このとき注意したいのは、break文が抜けるのは、基本的にいちばん近いループだけという点です。

たとえば、for文の中にfor文がある場合を考えます。

for(int row = 1; row <= 3; row++){
    for(int col = 1; col <= 3; col++){
        if(col == 2){
            break;
        }
    }
}

この場合、break文 は内側のfor文の中にあります。

そのため、break文 が実行されると、内側のfor文だけを抜けます。
外側のfor文まで終わるわけではありません。

break文の場所抜ける範囲
1重のループの中そのループを抜ける
2重ループの内側内側のループだけを抜ける
2重ループの外側外側のループを抜ける

この点は、最初のうちは少し混乱しやすいところです。

「break文は、自分が入っているいちばん近いループを終わらせる」と考えると整理しやすくなります。

ドラゴンボール風にたとえると、内側のループは「1つの修行場の中での型確認」です。
そこで break文 が出ると、その修行場の確認は終わります。

しかし、外側の「次の修行場へ進む流れ」までは終わりません。

ネストしたループで混乱しないための見方

ネストしたループで break文 を読むときは、次の点を確認すると分かりやすいです。

見るポイント確認すること
break文がどこにあるか内側か外側か
どの中かっこに囲まれているか抜けるループを見つける
いちばん近いループはどれかbreak文で終了する範囲
break後にどこへ進むかループ外の次の処理

特に、中かっこの位置が大切です。

for(int row = 1; row <= 3; row++){
    for(int col = 1; col <= 3; col++){
        if(col == 2){
            break;
        }
    }
    System.out.println("次の修行場へ進みます。");
}

この例では、break文 は内側のfor文を抜けます。
そのあと、外側のfor文の中にある次の処理へ進みます。

つまり、内側のループだけが終わり、外側の繰り返しは続きます。

ドラゴンボール風にたとえると、1つの修行場で「2番目の型まで確認したら切り上げる」と決めているようなものです。
その修行場の確認は終わりますが、次の修行場へ向かう任務は続きます。

図:ネストしたループでは近いループだけを抜ける

この図が示していること

この図では、ネストしたループで break文 を使ったときの抜ける範囲を示しています。

break文 が内側のfor文の中にある場合、終了するのは内側のfor文です。
外側のfor文まで同時に終了するわけではありません。

内側のfor文を抜けたあと、外側のfor文の中にある次の処理へ進みます。
その後、外側のループが続くなら、次の回の外側ループへ進みます。

ここから分かることは、ネストしたループでは、break文がどのループの中にあるかを確認することがとても大切だということです。

break文が向いている場面

break文は、次のような場面で便利です。

場面使い方のイメージ
探索処理目的のものが見つかったら終える
入力チェック条件を満たしたらループを抜ける
メニュー処理終了が選ばれたら抜ける
異常検知エラーを見つけたら処理を打ち切る
回数制限つき確認途中で条件に達したら切り上げる

break文は、「もう続ける必要がない」と判断できる場面で使うと自然です。

たとえば、目的の値を探しているなら、見つかったあとも探し続ける必要はありません。
メニュー処理なら、ユーザーが終了を選んだ時点で、ループを抜けるのが自然です。

ドラゴンボール風にたとえると、break文は「目的を達成したので、これ以上巡回しない」という判断です。

見つけたら終える。
異常があれば止める。
終了の合図があれば抜ける。

このような実用的な制御に向いています。

break文を使うときの注意点

break文は便利ですが、使い方には注意も必要です。

注意点内容
どこで抜けるか分かりにくくなることがある条件を明確に書く
多用すると流れを追いにくい本当に途中終了が必要な場面で使う
ネストで混乱しやすいどのループを抜けるのか意識する
break後の処理を確認するループ外のどこへ進むかを見る

特に初心者のうちは、if文の条件と break文 の位置をセットで見ると理解しやすいです。

if(i == stop){
    break;
}

この形なら、i が stop と等しくなったらループを抜ける、という意図が読み取りやすくなります。

一方で、break文があちこちに出てくると、処理の流れが追いにくくなることがあります。
そのため、break文は「ここで抜ける理由がはっきりしている」ときに使うのがよいです。

break文があると処理はどう変わるのか

ループ文だけの場合、基本の流れは「条件が false になるまで続ける」です。

for文なら、条件式が false になったときに終わります。
while文なら、条件が false になったときに終わります。
do~while文なら、処理後に条件を確認し、false なら終わります。

そこに break文 が加わると、もう1つの終了方法が生まれます。

終了方法内容
条件が false になる通常のループ終了
break文が実行される途中終了

break文を使うと、ループの終了条件とは別に、「この条件になったらすぐ抜ける」という道を作れます。

これは、実用的なプログラムを書くうえでとても大切です。

たとえば、10回まで探す予定でも、3回目で見つかったらそこで終わる。
100件まで確認する予定でも、異常が見つかったらすぐ止める。

このような処理を自然に書けるようになります。

break文を読むときのポイント

break文を読むときは、次の順番で確認すると分かりやすいです。

順番見ること
1どのループの中にあるか
2どの条件でbreakするか
3breakされたらどのループを抜けるか
4ループを抜けたあと、次に何が実行されるか
5breakしなかった場合はループがどう続くか

Sample9.java なら、次のように整理できます。

見るポイント内容
ループfor文で i を 1 から 10 まで進める
break条件i == stop
抜ける範囲for文を抜ける
抜けた後任務連絡の表示を終了しました。を表示
breakしない場合次の i へ進む

この見方をすると、break文があるコードでも処理の流れを追いやすくなります。

ドラゴンボール風にたとえると、break文を読むときは「どの任務から撤収するのか」「撤収後にどの指令へ進むのか」を確認するイメージです。

break文を学ぶ意味

break文を理解すると、繰り返し処理を「最後まで必ず続けるもの」ではなく、「必要に応じて途中で終えられるもの」として扱えるようになります。

これは、Javaで実用的な処理を書くうえでとても重要です。

break文でできること内容
ループを強制的に終了する条件に達した時点で抜ける
余計な処理を減らす目的達成後の繰り返しを避ける
異常時に打ち切る安全に処理を止められる
メニュー終了に使える終了選択でループを抜けられる
探索処理を自然に書ける見つかったらすぐ終われる

break文で特に大切なのは、次の4つです。

大切なこと内容
break文はループを抜けるプログラム全体を止めるわけではない
if文と組み合わせることが多い抜ける条件を明確にできる
もとの条件が true でも抜けられる途中終了のルールを作れる
ネストでは近いループを抜けるどのループを抜けるか意識する

ドラゴンボール風にたとえると、break文は「任務中に目的を達したら、その巡回を切り上げる撤収の合図」です。

ただ続けるだけではなく、必要なところで止める。
この感覚が身につくと、for文、while文、do~while文をより柔軟に使えるようになります。