広告

手を動かして学ぶ Java入門 (break文)

環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java の break文について学びます。

10分くらいで、さくっと終わる記事をめざしています。


シリーズ一覧

続きは近日公開予定!

はじめに

この記事は paiza.IO の「Online Java compiler」を利用しています。
2024/9/25 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)

実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。

詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。

前回のおさらい

while文 (英: while statement) はプログラミング言語において繰り返し(ループ)の制御構造を記述するための文 (statement) である。

前回の記事 では while文について学びました。
while文とは、処理を繰り返し実行するための制御文です。

  • 条件 A を満たしている間は B を処理し続ける

というコードですね。

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

while (条件式) {
    ループ文
}

今回は while文を制御するための break文について学びます。

break文とは

break文は、プログラミング言語のループ制御構造で用いられる文で、最も内側のfor文、while文、do-while文から脱出する。

break文とは、while文を終わらせるために使う「文」です。
while文を「終わらせる」と表現する代わりに、while文を「抜ける」とも表現しますね。

通常、while文は、

while (条件式) {
    ループ文
}

上記の条件式を 満たしている 間はループ文を実行し続けます。
しかし、break文を使えば、上記の条件式に関係なく、ループ文の好きな場所 で while文を終わらせることができます。

例えば、

  • ループ文の処理中に問題が発生したので即座にループを抜けたい

なんてときに使えますね。

break文は、

break;

と書きます。
「文」なので、末尾にセミコロン (;) が必要です。

一般的には、次のように if文とともに使うことが多いでしょう。

while (条件式1) {
    ... 処理A ...

    if (条件式2) {
        break;
    }
    ... 処理B ...
}

イメージ図2

フローチャート図にすると次のようになります。
(フローチャートとは、処理の流れを図にしたものです)

フローチャート1


それでは、プログラムで実際の動きを確認してみましょう。
コードは変更せずに、そのまま「実行(Ctrl-Enter)」ボタンを押してください。

while文の条件式は固定値の true となっており、常に条件式が満たされています

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

a = 1
a = 2
a = 3
break!
while文終了

と表示されたら成功です。


【補足】

繰り返し制御文には、while文の他にも

  • for文
  • 拡張for文 (for-eachループ文)

があります。
もちろん、for文や 拡張for文でも break文は使えます。

コードの解説

int a = 1;

while (true) {
    System.out.println("a = " + a);
    if (a > 2) {
        System.out.println("break!");
        break;
    }
    a = a + 1;
}
System.out.println("while文終了");

それでは、先ほどのコードを少しずつ見ていきましょう。
まずは、変数 a を 1 で初期化します。

int a = 1;

次は while文です。

while (true) {
    ...
}

while文の条件式は固定値の true となっており、常に条件式が満たされています
このままでは無限ループとなってしまいますね … でも大丈夫です。

if文の a > 2 の条件を 満たせば、break文が実行されて while文が終わります。

while (true) {
    ...
    if (a > 2) {
        ...
        break;
        ^^^^^^ <---- ★大事なポイント!
    }
    ...
}

もし if文の a > 2 の条件を 満たさなければ、次の処理にすすみます。

while (true) {
    ...
    if (a > 2) {
        ...
        break;
    }
    a = a + 1;
    ^^^^^^^^^^ <--- この部分!
}

変数 a は、最初 1 だったので、

a = 1 + 1

となり、変数 a に 2 が代入されます。

これでループ文の処理はすべて終わりです。
そのため、ループ文の先頭から処理を実行していきます。

先ほどとは違って変数 a は 2 になっています。

while (true) {
    System.out.println("a = " + a);
                       ^^^^^^^^^^ <--- "a = 2" と表示
    ...
}

ただし、if文の a > 2 の条件はまだ 満たしていません
すると、a = a + 1 が実行されて、変数 a は 3 になります。

さて、またループ文の先頭から処理を実行していきます。
今度は変数 a は 3 になっています。

ついに、if文の a > 2 は条件を 満たしました
そのため、if文 の { ... } の部分が実行されます。

while (true) {
    ...
    if (a > 2) {
        ^^^^^ <--- 条件を満たす!

        System.out.println(break!);
        break;
    }
    ...
}
System.out.println("while文終了");

println メソッドで "break!" と表示してから、break文で while文を抜けます。
最後に println メソッドで "while文終了" と表示して、プログラムは終わります。


多重ループの break文

while文の中に、さらに while文があることを 多重ループ といいます。

while (...) {  // 外側の while文
    ...
    while (...) { // 内側の while文
        ...
    }
}

さて、「内側の while文」の中で break すると、繰り返し制御はどうなるのでしょうか?
「外側の while文」の外にまで、いっきに抜けるのでしょうか?

while (...) {
    ...
    while (...) {
        if (...) {
            break; // ★ここ!
        }
        ...
    }
}

答えは「内側の while文からだけ抜ける」です。
外側の while文からは抜けません。

イメージ図1


それでは、プログラムで実際の動きを確認してみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

a = 2
a = 4
a = 6

と表示されたら成功です。


【補足】

a % 2 == 0

この式は、変数 a偶数かどうか を判定する条件式です。

数値と演算」の記事で解説しましたが、% 記号は、割り算の「余り」を計算します。
数値を 2 で割って余りが 0 であれば偶数、余りが 1 であれば奇数と判定できます。

1 % 2 == 1
2 % 2 == 0
3 % 2 == 1
4 % 2 == 0
:
:

という感じですね。

応用問題

【問題】

プログラムを実行すると、

x = 1 : y = 2
x = 3 : y = 4
x = 5 : y = 16

と「出力」へ表示されるようにしてください。

プログラム中で書き換えてよいのは1か所です。
変数 y の代入文の ### の部分です。

y = ###;
    ^^^ <--- ★この部分

例えば y = y + 1; のような感じで、書き換えてみてください。

それでは、下のプログラムの # の箇所を書き換えて「実行(Ctrl-Enter)」してみましょう。

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

無事に、

x = 1 : y = 2
x = 3 : y = 4
x = 5 : y = 16

と出力されましたでしょうか?

もし解けなかった場合は、下記の回答例をご参照ください。

回答例

【コード】

public class Main {
    public static void main(String[] args) {
        int x = 1;
        int y = 2;

        while (x < 6) {
            System.out.println("x = " + x + " : y = " + y);

            if (y > 10) {
                break;
            }

            x = y + 1;
            y = y * y;
        }
    }
}

【出力】

x = 1 : y = 2
x = 3 : y = 4
x = 5 : y = 16

まとめ

break文とは、繰り返し制御文 (while文や for文など) を終わらせるために使う「文」です。
一般的には、次のように if文とともに使うことが多いでしょう。

while (条件式1) {
    ...

    if (条件式2) {
        break;
    }
    ...
}

イメージ図2

break文を使えば、ループ文の好きな場所で while文を終わらせることができます。
例えば、

  • ループ文の処理中に問題が発生したので即座にループを抜けたい

なんてときに使えます。

有効に活用してしていきたいですね。

次回は「手を動かして学ぶ Java入門 (continue文)」になります。


関連記事

ページの先頭へ