ではここでは、
《break/continue/return の使い分け 早見表+練習問題セット》
を初心者〜実務者まで理解できるテキスト教材スタイル(図+コード表+練習問題付き)でまとめます。
1. まずざっくり違いを掴む
| 制御文 | 何を止める? | その後どうなる? | 主な使いどころ |
|---|---|---|---|
break | ループ全体 | ループを終了し、外の処理へ進む | 検索処理・リトライ・異常終了 |
continue | 今の1回の繰り返し | その周の残り処理をスキップして次へ | 条件スキップ・フィルタ処理 |
return | メソッド全体 | メソッドの実行を終了し、呼び出し元へ戻る | 条件不成立で即終了・早期リターン |
2. ASCII 図でイメージ
┌─────for文────┐
│ i=1 │
│ │ │
│ [条件分岐] │
│ │ │
│ ├─ continue → 次のiへ ← (ループは続く)
│ ├─ break ---------> ループを抜ける
│ └─ return --------> メソッド自体を終了
└───────────┘
3. コードで比較(for文内)
for (int i = 1; i <= 5; i++) {
if (i == 2) continue; // この回だけスキップ
if (i == 4) break; // ループ終了
if (i == 5) return; // メソッド終了(以降の処理に行かない)
System.out.println("i=" + i);
}
System.out.println("for文の外側");
Java出力:
i=1
i=3
for文の外側 ← breakで止まるのでreturn行は到達せず
4. 実務での使い分けパターン表
| 処理目的 | 最適な制御文 | 実務での例 |
|---|---|---|
| 検索で最初に見つけた時に終える | break | ユーザーID一致で処理終了 |
| 不正値だけ飛ばして続けたい | continue | データ中のnullをスキップ |
| メソッド全体を早期終了したい | return | 引数が不正なら即終了 |
| ネストをすぐ抜けたい | break(ラベル付き) | 二重ループ探索の中断 |
| Streamに書き換えるとき | findFirst / anyMatch | break相当の早期終了 |
5. 実務コード例(対比)
break:最初に一致したら終了
for (User u : users) {
if (u.id().equals(targetId)) {
System.out.println("見つけた:" + u);
break;
}
}
System.out.println("検索完了");
Javacontinue:不正データだけスキップ
for (User u : users) {
if (u.isInactive()) continue;
process(u);
}
Javareturn:早期リターン(バリデーション)
public void register(User u) {
if (u == null) return;
if (u.getName().isBlank()) return;
save(u);
}
Java6. よくある混同パターン(注意!)
| 例 | よくある誤解 | 正しい理解 |
|---|---|---|
break でメソッドを抜けると思っている | × ループしか抜けない | ✅ return がメソッド終了 |
continue でループが止まる | × ループは継続 | ✅ その1回だけスキップ |
return をループ中に使う | OKだが注意 | メソッド全体を抜けるため、ループの外の処理は実行されない |
7. 練習問題(解答付き)
【問題1】
1〜10 まで表示し、5 になったら止める。
👉 使用すべき制御文は?
答え: break
for (int i = 1; i <= 10; i++) {
if (i == 5) break;
System.out.println(i);
}
Java【問題2】
1〜5 のうち、偶数だけスキップして奇数だけ出力。
👉 使用すべき制御文は?
答え: continue
for (int i = 1; i <= 5; i++) {
if (i % 2 == 0) continue;
System.out.println(i);
}
Java【問題3】
メソッド printPositive(int n) を作り、負の数なら何もせず終了する。
👉 使用すべき制御文は?
答え: return
void printPositive(int n) {
if (n < 0) return;
System.out.println("n=" + n);
}
Java【問題4】
二重ループで、特定の値が見つかったら両方のループを抜ける。
👉 使用すべき制御文は?
答え: break(ラベル付き)
Outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 2) {
System.out.println("発見!");
break Outer;
}
}
}
Java【問題5】
break・continue・return の違いを1行で説明してみよう。
答え例:
break はループを抜ける、continue は1回スキップ、return はメソッドを終える。
8. まとめ図
┌────────────────────┐
│ break → ループを抜ける │
│ continue → その回をスキップ │
│ return → メソッドを終了 │
└────────────────────┘
9. チャレンジ課題(中級)
- 入力値が
"stop"ならループを抜ける(break) - 空文字ならスキップ(continue)
"exit"ならメソッド終了(return)
void processInput(Scanner sc) {
while (true) {
System.out.print("入力: ");
String s = sc.nextLine();
if (s.equals("stop")) break;
if (s.isEmpty()) continue;
if (s.equals("exit")) return;
System.out.println("入力: " + s);
}
System.out.println("ループ終了");
}
Java10. 現場Tips
returnは「早期リターン」として、ネストを浅く保つ書き方に使うのが◎。breakとcontinueは「可読性のために条件を減らす」目的で使うと綺麗。- Stream API ではそれぞれに相当する構文:
break→findFirst(),anyMatch()continue→filter()return→ メソッド分割で代替
