
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 かどうかを調べる |
| 3 | 8 なら 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 もまさにそのための道具で、ループをより実戦的に使いこなすための大切な仕組みです。
