Java | continue 文

Java Java
スポンサーリンク

Javaのcontinue文のやさしい説明

「この回の残りはパス!次の回へいこう」という合図がcontinueです。ループの中で特定の条件に当てはまったときだけ、その回の残り処理をスキップして、すぐ次の繰り返しに進みます。


基本の考え方

  • 役割: ループ(for/while)の「今の回」の残りをスキップして、次の回へ進める。
  • 直感的なイメージ: 行列で「この人は飛ばして次の人を呼ぶ」感じ。
  • よく使う場面: 入力の中から不正な値を除外したい、特定の条件に当てはまるデータだけ飛ばしたい。

for文での例

例1:3の倍数をスキップ

  • ポイント: 条件に合えばprintlnを実行せず、次のiへ。
for (int i = 1; i <= 10; i++) {
    if (i % 3 == 0) {
        continue; // 3の倍数はスキップ
    }
    System.out.println("i = " + i);
}
Java
  • 結果イメージ: 1, 2, 4, 5, 7, 8, 10(3, 6, 9は表示されない)

例2:空文字はスキップして処理を軽くする

  • ポイント: 無駄な処理を早めに避ける「早期スキップ」。
String[] names = {"Alice", "", "Bob", "", "Carol"};
for (int i = 0; i < names.length; i++) {
    if (names[i].isEmpty()) {
        continue; // 空文字は飛ばす
    }
    System.out.println("Hello, " + names[i]);
}
Java
  • 結果イメージ: Hello, Alice / Hello, Bob / Hello, Carol

while文での例

例3:負の数はスキップして合計を計算

  • ポイント: 先にインデックスを進めるのを忘れない(無限ループ防止)。
int[] nums = {5, -2, 7, -1, 3};
int i = 0;
int sum = 0;

while (i < nums.length) {
    if (nums[i] < 0) {
        i++;          // 次へ進める!
        continue;     // 負の数は合計に入れない
    }
    sum += nums[i];
    i++;
}
System.out.println("sum = " + sum);
Java
  • 結果イメージ: sum = 15(-2と-1は無視)

breakとの違い

  • continue: 今の回の残りを飛ばして「次の回へ」進む。
  • break: ループ自体を「完全に終了」する。

例4:違いがわかる短いコード

for (int i = 1; i <= 5; i++) {
    if (i == 3) continue; // 3は表示しない
    System.out.println(i);
}
// 出力: 1, 2, 4, 5

for (int i = 1; i <= 5; i++) {
    if (i == 3) break; // 3でループ終了
    System.out.println(i);
}
// 出力: 1, 2
Java

多重ループとラベル付きcontinue

  • 通常のcontinue: 一番内側のループだけをスキップ。
  • ラベル付きcontinue: 指定した外側のループの「次の回」へ直接進む。

例5:外側のループへ飛ぶ

Outer:
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if ((i + j) % 2 == 0) {
            continue Outer; // 外側のforの次のiへ
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
Java
  • ポイント: 「内側の残り+外側の内側の続き」まるごと飛ばして、外側の次の繰り返しへ。
  • 注意: ラベルは読みやすさが落ちやすいので、必要なときだけ使う。

よくあるつまずき

  • インデックスの更新忘れ: whileでcontinueを使うとき、ループ変数を進めないと無限ループになる。
  • 過度なcontinue: ロジックが読みにくくなる。早期returnや条件分岐の整理で置き換えられるなら検討する。
  • ネストの深い場所で連発: 条件の分岐構造を見直すサイン。関数に切り出すとスッキリする。

使いどころと避けどころ

  • 使いどころ: フィルタリング(不要データの除外)、検証(不正値のスキップ)、軽量化(重い処理の前に早期判定)。
  • 避けどころ: 複雑な入れ子での多用、状態管理が絡む長い処理の途中。読みやすさを優先してifの形にするほうが良いことも多い。

練習問題

問題1:偶数だけを合計

  • 課題: 配列から偶数だけを合計し、結果を出力する。奇数はcontinueでスキップ。
int[] data = {1, 2, 3, 4, 5, 6};
int sum = 0;
for (int x : data) {
    if (x % 2 != 0) {
        continue;
    }
    sum += x;
}
System.out.println(sum); // 12になるはず
Java

問題2:空白行を飛ばして行番号付きで表示

  • 課題: 行の配列を順に表示し、空白(trim後に長さ0)はcontinueで飛ばす。
String[] lines = {"hello", "   ", "world", "", "java"};
int lineNo = 1;
for (String line : lines) {
    if (line.trim().isEmpty()) {
        continue;
    }
    System.out.println(lineNo + ": " + line);
    lineNo++;
}
Java

問題3:二重ループで禁則条件を飛ばす

  • 課題: i=1..3, j=1..3で、i*jが偶数になったら外側の次のiへ進む(ラベル付きcontinue)。
Outer:
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if ((i * j) % 2 == 0) {
            continue Outer;
        }
        System.out.println("pair: " + i + "-" + j);
    }
}
Java

まとめ

  • キーワード: 「今の回をスキップして次へ」=continue、「ループ終了」=break。
  • 実践のコツ: 早めの条件チェックで無駄を減らし、インデックス更新を忘れない。読みやすさを崩すほど続けて使うなら設計を見直す。
  • 一言: 迷ったら「この回だけ飛ばしたい?」と自分に聞いて、YESならcontinueの出番です。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました