6日でできる 新Java入門|制御文⑥ ループの制御

止める・飛ばすを使い分けられるようになると、ループはもっと実戦的になる。breakとcontinueを覚えて、繰り返し処理を自在にコントロールしよう

for文やwhile文を使えるようになると、同じ処理を何度もくり返すことができるようになります。でも、実際のプログラムでは、ただ最後まで順番に回せばよいとは限りません。途中で目的の値が見つかったら、その場でループを終わらせたいこともありますし、今の1回だけは処理を飛ばして次へ進みたいこともあります。そうした ループの途中の動き を細かく調整するために使うのが break文 と continue文 です。

ドラゴンボールの世界でたとえるなら、修行をくり返している最中に、探していた技の巻物を見つけたらそこで探索を打ち切ることがありますし、今の動作は条件に合わないからこの1回だけ飛ばして次の型へ進むこともあります。つまり、ただ続けるだけではなく、途中で止める、あるいは一部を飛ばす判断が必要です。Javaの break と continue は、その判断をプログラムの中で表現するための大事な道具です。

この記事では、break文によるループの中断、ラベル付きbreakによる多重ループからの脱出、continue文による1回分の処理のスキップ、さらにラベル付きcontinueによる外側ループの制御まで、順番に丁寧に見ていきます。例示するプログラムは Lesson13_1.java から Lesson13_4.java までを使い、修行データの探索や技判定の流れに置き換えながら解説します。ここを理解すると、ループをただ回すだけでなく、必要なタイミングで止めたり飛ばしたりできるようになり、コードがかなり実用的になります。

ループの制御とは何か

ループの制御とは、繰り返し処理の途中で流れを変えることです。普通の for文 や while文 は、条件に従って最後まで処理を進めますが、break や continue を使うと、途中で止めたり、一部の処理だけを飛ばしたりできます。

ループ制御でできること

制御何が起きるか
breakそのループを途中で完全に抜ける
continueその回の残りの処理を飛ばして次の回へ進む
ラベル付きbreak多重ループの外側まで一気に抜ける
ラベル付きcontinue多重ループの外側の次の回へ進む

ドラゴンボール風に言えば、break は 修行をその場で終了する合図、continue は 今回の型は飛ばして次の型へ進む合図 のようなものです。

break文によるループの中断

break文は、今実行しているループからすぐに抜けるための命令です。条件に合ったものを見つけたら、それ以上調べる必要がないときなどによく使います。

break文の基本イメージ

項目内容
役割ループをその場で終了する
向いている場面探し物が見つかったとき、条件を満たした時点で終わりたいとき
効果そのループの外へ出る

ドラゴンボール風にたとえるなら、修行場を順番に探していて、目的の秘伝書が見つかった瞬間に、それ以上ほかの棚を見ずに探索を終えるような動きです。

break文の基本例

特定の修行番号を見つける探索を例に説明します。

ファイル名:Lesson13_1.java

public class Lesson13_1 {
    public static void main(String[] args) {
        int[] trainingData = {1, 2, 3, 3, 2, 5, 6, 7, 1, 0, 3, 1, 4, 8, 2, 5};
        int i;

        for (i = 0; i < trainingData.length; i++) {
            if (trainingData[i] == 8) {
                break;
            }
        }

        System.out.println("特別修行番号 8 は配列の " + i + " 番目に見つかりました。");
    }
}

実行結果

特別修行番号 8 は配列の 13 番目に見つかりました。

このプログラムでは、配列 trainingData を先頭から順番に見ていき、値が 8 になったところで break を実行しています。その時点で for文 は終了し、ループの外に出ます。

この流れで見たいこと

段階内容
1配列を先頭から順番に見る
2値が 8 かどうかを調べる
38 なら break でループ終了
4見つかった位置を表示する

ここで大事なのは、break が実行された時点で、それ以降の繰り返しは行われないことです。最後まで全部見る必要がないなら、break で効率よく止められます。

ラベル付きbreak文

普通の break文 は、一番内側のループだけを抜けます。けれど、ループが入れ子になっているときには、内側だけでなく外側もまとめて抜けたいことがあります。そのために使うのが ラベル付きbreak文 です。

ラベル付きbreakの考え方

項目内容
ラベルループに付ける名前
break ラベル名そのラベルが付いたループを抜ける
主な用途多重ループから一気に脱出したいとき

ドラゴンボール風にたとえるなら、内側の修行室だけを出るのではなく、外側の訓練施設ごと一気に出るための非常口のようなものです。

ラベル付きbreak文の例

ここでは、i と j の組み合わせの中から、特定の技の組み合わせ値 391 を見つけたら、探索全体を終える例にします。

ファイル名:Lesson13_2.java

public class Lesson13_2 {
    public static void main(String[] args) {
        outer:
        for (int i = 0; i < 50; i++) {
            for (int j = 0; j < 50; j++) {
                if (i * j == 391) {
                    System.out.println(i + " × " + j + " = 391");
                    break outer;
                }
            }
        }
    }
}

実行結果

17 × 23 = 391

このプログラムでは、外側の for文 に outer というラベルを付けています。そして条件を満たしたら break outer; を実行し、外側のループごと終了しています。

通常のbreakとの違い

書き方抜ける範囲
break;一番内側のループだけ
break outer;outer が付いたループまで抜ける

この違いを理解しておくと、多重ループの制御がかなり分かりやすくなります。

continue文によるループのスキップ

continue文は、その回のループの残りの処理を飛ばして、次の繰り返しへ進むための命令です。ループそのものは終わりませんが、今の1回分だけ途中で切り上げます。

continue文の基本イメージ

項目内容
役割その回の残りの処理を飛ばす
向いている場面条件に合わないものは処理せず次へ進みたいとき
効果ループは続くが、今の回は途中で終わる

ドラゴンボール風に言えば、今見ている型は対象外なのでこの回は飛ばし、次の型確認へすぐ進むような動きです。

continue文の基本例

ここでは、配列の中から 3 の値だけを数え、その位置を表示する例を、特定の修行記号だけを探す流れとして説明します。

ファイル名:Lesson13_3.java

public class Lesson13_3 {
    public static void main(String[] args) {
        int[] trainingData = {1, 2, 3, 3, 2, 5, 6, 7, 1, 0, 3, 1, 4, 8, 2, 5};
        int count = 0;

        for (int i = 0; i < trainingData.length; i++) {
            if (trainingData[i] != 3)
                continue;

            count++;
            System.out.println("修行記号 3 は " + i + " 番目にあります。");
        }

        System.out.println("修行記号 3 の出現回数: " + count + " 回");
    }
}

実行結果

修行記号 3 は 2 番目にあります。
修行記号 3 は 3 番目にあります。
修行記号 3 は 10 番目にあります。
修行記号 3 の出現回数: 3 回

このプログラムでは、値が 3 でない場合は continue ですぐ次の回へ進みます。そのため、3 のときだけ count++ や表示処理が行われます。

この例の流れ

条件動き
3 ではないcontinue でスキップ
3 であるcount を増やして位置を表示する

ここで大切なのは、continue は ループを終わらせるのではなく、その回の残りだけを飛ばす という点です。break との違いがはっきりしています。

ラベル付きcontinue文

continue にもラベルを付けることができます。多重ループの中で、外側のループの次の回へ進みたいときに使います。

ラベル付きcontinueの考え方

項目内容
continue ラベル名指定したラベルの次の繰り返しへ進む
主な用途多重ループで外側の次の回へ飛びたいとき
注意点読みにくくなりやすいので使いすぎに注意

ドラゴンボール風にたとえるなら、内側の細かな確認を途中でやめて、次の修行段階そのものへ進む合図のようなものです。

ラベル付きcontinue文の例

ここでは、i と j が同じときは、外側ループの次へ進む例を説明します。

ファイル名:Lesson13_4.java

public class Lesson13_4 {
    public static void main(String[] args) {
        outer:
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (i == j) continue outer;
                System.out.println("i=" + i + ", j=" + j);
            }
        }
    }
}

実行結果

i=2, j=1
i=3, j=1
i=3, j=2

このプログラムでは、i == j になった瞬間に continue outer; が実行されます。すると、内側ループの残りを飛ばすだけでなく、外側ループの次の回へ進みます。

普通のcontinueとの違い

書き方進む先
continue;今のループの次の回
continue outer;outer が付いたループの次の回

この違いは少し複雑ですが、多重ループを強く制御したいときには役立ちます。

breakとcontinueの違い

ここまで見てきた内容を整理すると、break と continue は似ているようで役割がかなり違います。

breakとcontinueのまとめ

制御文動作用途例
breakループを途中で完全に抜ける条件一致で探索を終えたいとき
continueその回の処理をスキップし、次の繰り返しへ進む条件に合わないものを飛ばしたいとき
ラベル付き多重ループで外側や特定のループにも対応複雑な入れ子を制御したいとき

ドラゴンボール風に言えば、break は 修行終了の笛、continue は 今回の型は飛ばして次へ進む合図 です。似ていても意味はかなり違います。

使いすぎに注意する理由

break や continue は便利ですが、使いすぎるとコードの流れが見えにくくなります。特にラベル付きの break や continue は、強力なぶん複雑になりやすいです。

注意したいこと

注意点内容
途中の流れが飛びやすい読み手が処理の進み方を追いにくくなる
ラベル付きは特に強い多重ループの外まで急に飛ぶので分かりにくくなる
シンプルさが大事まずは普通の break / continue を基本に考える

つまり、使えるからといって何でも break や continue で片づけるのではなく、できるだけ流れが読みやすい形を意識することが大切です。

break文の流れを図で整理

break文は、条件を満たした瞬間にループを打ち切る動きをします。

この図は、ループが順番に処理を進めていく途中で、特定条件に一致した瞬間に break文 が実行され、その場でループの外へ出る流れを示したものです。最後まで全部調べるのではなく、目的の値が見つかったら探索を終える、という使い方が視覚的に分かります。

↓クリックすると拡大表示されます。

この図が示していること

この図は、ループが途中まで進んだあと、条件に合う要素を見つけた瞬間に break文 で処理を打ち切り、残りを見ずに外へ出ることを示しています。

この図から分かること

この図を見ると、break文は その回だけを飛ばす のではなく、ループ全体を終わらせる働きを持つことが分かります。探索系の処理で効率よく使えます。

continue文の流れを図で整理

continue文は、今の回だけ残りを飛ばして次へ進む動きをします。これも図にすると break との違いがかなり見やすくなります。

下図は、ループのある回で条件に合わなかった場合に continue文 が実行され、その回の残り処理を飛ばして、次の繰り返しへ移る流れを示したものです。ループ自体は終わらず、次の要素の確認へ進むことが視覚的に分かります。

↓クリックすると拡大表示されます。

この図が示していること

この図は、continue文が 今の回の残りだけを中断し、次の繰り返しへ直接進ませる ことを示しています。ループそのものは継続している点が break文 と大きく違います。

この図から分かること

この図を見ると、continue文は ループ全体を終える のではなく、その回だけを飛ばす制御だと分かります。break文との違いが分かります。

breakとcontinueを理解すると、ループに細かな判断を持たせられる

for文やwhile文を使って繰り返し処理が書けるようになると、その次に必要になるのが 途中でどう制御するか という視点です。break を使えば条件に合った時点で探索を終えられますし、continue を使えば不要な回だけを飛ばして次へ進めます。さらに、ラベル付き break や continue を使えば、多重ループの流れも細かく操作できます。

ドラゴンボールの修行でも、ただ同じ動作を最後まで回し続けるのではなく、必要なところで止める、不要な型は飛ばす、次の段階へ素早く進む、といった判断が入ることで、修行の質が上がります。Javaの break と continue もまさにそのための道具で、ループをより実戦的に使いこなすための大切な仕組みです。