Javaのbreak・continueの使い方を完全解説!繰り返し処理を自由自在に操るコツ
生徒
「for文やwhile文でループさせている途中で、特定の条件の時だけ処理を中断したり、次に飛ばしたりしたいんですけど、どうすればいいですか?」
先生
「そんな時に便利なのが、Javaの制御構文であるbreak文とcontinue文です。これらを使うと、繰り返し処理の流れを細かくコントロールできるようになりますよ。」
生徒
「名前は聞いたことがありますが、使い分けが少し難しそうです。具体的にどう違うんでしょうか?」
先生
「breakは『完全に抜ける』、continueは『次に進む』というイメージです。実際のコード例を見ながら、一緒にマスターしていきましょう!」
1. Javaの繰り返し処理を制御する二つの命令
Javaプログラミングにおいて、for文やwhile文といった繰り返し処理(ループ)は欠かせない要素です。しかし、単純に最初から最後まで回すだけでなく、「ある条件を満たしたらすぐにループを終わらせたい」場合や、「特定のケースだけ処理をスキップして、次のループへ進みたい」という場面が頻繁に発生します。
このような状況を解決するために用意されているのが、break(ブレイク)文とcontinue(コンティニュー)文です。これらはジャンプ文とも呼ばれ、プログラムの実行順序を強制的に変更する役割を持っています。初心者の方がまず覚えるべきは、この二つの命令が「ループのどこに影響を与えるか」という点です。適切に使い分けることで、コードがシンプルになり、無駄な計算を省く効率的なプログラムを書くことができるようになります。
2. break文の基本!ループを強制終了する方法
break文は、現在実行中の繰り返し処理をその場で強制的に終了させるために使用します。スイッチ文(switch文)でも使われますが、ループ処理の中で使われると、そのbreakが書かれている一番内側のループから即座に脱出します。ループを抜けた後は、そのループ構造のすぐ後ろにある命令から処理が再開されます。
例えば、大量のデータの中から特定の値を検索している時、目的のものが見つかったらそれ以上探す必要はありませんよね。そのような場合にbreakを使うと、処理時間を短縮できます。日常生活で例えるなら、マラソンをしていて「ゴールした瞬間に走るのをやめる」のがbreakのイメージです。まだ周回数が残っていても、その時点で運動をストップします。これをプログラムで表現すると、非常にスマートな制御が可能になります。
public class BreakExample {
public static void main(String[] args) {
System.out.println("カウントダウンを開始します。");
for (int i = 1; i <= 10; i++) {
if (i == 6) {
System.out.println("6になったので処理を中断します。");
break; // iが6のとき、ループを終了する
}
System.out.println("現在の値: " + i);
}
System.out.println("ループを抜けました。");
}
}
カウントダウンを開始します。
現在の値: 1
現在の値: 2
現在の値: 3
現在の値: 4
現在の値: 5
6になったので処理を中断します。
ループを抜けました。
3. continue文の基本!特定の処理をスキップする方法
一方、continue文は、ループ自体を終わらせるのではなく、現在の周回の残り処理だけをスキップして、次の繰り返し(更新処理)へ進むために使います。for文であれば、continueが呼ばれた瞬間にインクリメント(i++など)の部分へジャンプし、再び条件式の判定が行われます。while文の場合は、条件式の判定まで戻ります。
特定の条件に当てはまるデータだけを除外して処理を続けたい場合に非常に便利です。例えば、「1から10までの数字を表示するけれど、3の倍数だけは表示したくない」といった場合に利用します。マラソンの例えなら、「給水ポイントでは立ち止まらずに通過するが、走ること自体は続ける」のがcontinueです。その瞬間の特定の動作だけを飛ばして、全体の流れは維持します。
public class ContinueExample {
public static void main(String[] args) {
System.out.println("1から5までの数字で偶数だけを表示します。");
for (int i = 1; i <= 5; i++) {
if (i % 2 != 0) {
// 奇数の場合は、これ以降の処理を飛ばして次のループへ
continue;
}
System.out.println("偶数: " + i);
}
}
}
1から5までの数字で偶数だけを表示します。
偶数: 2
偶数: 4
4. breakとcontinueの違いを徹底比較
初心者の方が最も混乱しやすいのが、この二つの使い分けです。表を使って視覚的に整理してみましょう。どちらもif文と組み合わせて使われることが一般的ですが、その後の挙動が決定的に異なります。breakは「破壊・中断」、continueは「継続・続行(ただし今だけ飛ばす)」という言葉の意味を意識すると覚えやすくなります。
| 項目 | break文 | continue文 |
|---|---|---|
| 動作 | 繰り返し処理全体を終了させる | 現在の回をスキップして次へ進む |
| 実行後の場所 | ループのブロック外へ抜ける | ループの先頭(更新・判定)へ戻る |
| 主な用途 | 検索完了時、エラー発生時の脱出 | 特定条件のデータ除外、フィルタリング |
このように、目的が全く逆と言っても過言ではありません。間違えて使うと、無限ループに陥ってしまったり、必要な処理が行われなかったりするため、プログラムの論理構造をしっかり考える必要があります。特にwhile文でcontinueを使う際は、変数の更新処理を飛ばしてしまわないよう注意が必要です。
5. while文での活用例と無限ループの回避
while文の中でbreakやcontinueを使う場合は、for文とは少し異なる注意点があります。while文は条件が真(true)である限り動き続けますが、ループ内で条件が変化しない場合、永遠に止まらない「無限ループ」になってしまいます。ここでbreakを上手に使うと、あえて無限ループを作り、内部の複雑な条件で脱出させるといった高度な書き方も可能になります。
以下のサンプルでは、ユーザーから入力された合計値が一定を超えたら終了するような仕組みをシミュレートしています。breakを使うことで、柔軟な終了タイミングを設計できることがわかります。逆にcontinueを使う場合は、カウンタ変数の更新を忘れると、同じ値をずっと判定し続ける無限ループになりやすいので、コードの記述順序に気をつけてください。
public class WhileControlExample {
public static void main(String[] args) {
int sum = 0;
int count = 0;
while (true) { // 意図的な無限ループ
count++;
if (count > 10) {
break; // 10回試行したら強制終了
}
if (count % 3 == 0) {
System.out.println(count + "はスキップします。");
continue; // 3の倍数の時は加算せずに次へ
}
sum += count;
System.out.println("現在の合計(" + count + "を加算): " + sum);
}
System.out.println("最終的な合計値: " + sum);
}
}
現在の合計(1を加算): 1
現在の合計(2を加算): 3
3はスキップします。
現在の合計(4を加算): 7
現在の合計(5を加算): 12
6はスキップします。
現在の合計(7を加算): 19
現在の合計(8を加算): 27
9はスキップします。
現在の合計(10を加算): 37
最終的な合計値: 37
6. 多重ループ(入れ子)におけるbreakの挙動
実務では、for文の中にさらにfor文が入っている「多重ループ(二重ループ)」を扱うことがよくあります。この時、内側のループでbreakを使うとどうなるでしょうか?答えは、「今いる一番内側のループだけを抜ける」です。外側のループはそのまま継続されます。これは初心者の方が非常につまずきやすいポイントです。
もし、内側のループから一気に外側のループまで抜けたい場合は、Javaでは「ラベル付きbreak」という機能を使います。ラベルを任意のループの前に付けることで、どのループから脱出するかを指定できるようになります。ただし、ラベルは多用するとコードの可読性を下げる可能性があるため、まずは基本の一重ループでの挙動を完璧に理解することが大切です。九九の表を作るようなプログラムをイメージすると、この多重ループの制御が理解しやすくなります。
public class NestedLoopExample {
public static void main(String[] args) {
System.out.println("二重ループのテスト(内側が3になるとbreak)");
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 5; j++) {
if (j == 3) {
System.out.println(" 内側ループをj=" + j + "で抜けます");
break; // 変数jのループだけを終了
}
System.out.println("外側:" + i + " 内側:" + j);
}
// break後はここに来る(外側のループは継続)
}
}
}
二重ループのテスト(内側が3になるとbreak)
外側:1 内側:1
外側:1 内側:2
内側ループをj=3で抜けます
外側:2 内側:1
外側:2 内側:2
内側ループをj=3で抜けます
外側:3 内側:1
外側:3 内側:2
内側ループをj=3で抜けます
7. 実践的な使い方!データのフィルタリングと検索
実際の開発現場でbreakやcontinueがどのように役立つのか、もう少し具体的なイメージを膨らませてみましょう。よくあるケースは、リストや配列の中にある大量のデータから、条件に合うものを探したり、不適切なデータを除外したりする場合です。例えば、ECサイトの在庫管理システムを想像してください。
商品のリストを順番にチェックしていき、在庫切れの商品を見つけたらその商品だけ「入荷待ち」と表示して処理を飛ばす(continue)、あるいはシステムに重大なエラーを見つけたら即座に点検をストップする(break)といった制御が可能です。このように、ビジネスロジック(業務上のルール)をプログラムに落とし込む際に、これらの制御構文は強力な武器となります。最初は単純な数値計算から練習し、徐々に複雑な条件分岐と組み合わせてみてください。
8. break・continueをマスターするための学習アドバイス
ここまで、Javaのbreakとcontinueについて解説してきました。理解を深める一番の近道は、自分でコードを書いて、条件を変えて実行してみることです。特に「もしここでbreakがなかったらどうなるか?」「continueを消したら出力はどう変わるか?」を実験してみてください。自分の予想と実際の実行結果を照らし合わせることで、プログラムの動きが直感的にわかるようになります。
また、演算子(比較演算子や論理演算子)との組み合わせも重要です。if (i > 10 && i % 2 == 0) のように複数の条件を設定し、その中でこれらの構文を使い分ける練習をしましょう。Javaの基礎を固める上で、ループの制御は避けて通れない非常に重要なステップです。これが自由自在に使えるようになれば、あなたのプログラミングスキルは一段上のレベルへと到達するでしょう。焦らず一歩ずつ、楽しみながらコードを書いていきましょう!