Java道|break文のしくみと使い方

必要なところで、きっぱり止める。
break文を覚えると、繰り返し処理を最後まで走らせず、状況に合わせて自然に抜けられる。

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

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

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

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

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

break文は、ループの途中で実行されると、そのループをその場で終了し、ループの外側へ処理を移します。もともとの繰り返し条件がまだ true であっても、break文が実行された時点で、繰り返しを打ち切れるのが大きな特徴です。この記事では、指定内容に沿って Sample9.java のみを使い、break文の基本、ループを抜ける流れ、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文は、条件に応じて繰り返しの流れを変えるための道具です。

図: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文を見たときは、「ただ終わる」ではなく、「今いるループを抜ける」と考えると理解しやすいです。

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文がない場合とある場合の違いを比較しています。

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

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

ここから分かることは、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文の中にある次の処理へ進みます。

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

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

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

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

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

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

鬼滅の刃風にたとえると、break文は「任務中に目的を達したら、その巡回を切り上げる撤収の合図」です。
ただ続けるだけではなく、必要なところで止める。
この感覚が身につくと、for文、while文、do~while文をより柔軟に使えるようになります。