Java入門|continue文で処理をスキップする

止めるのではなく、今回は飛ばす。continue文を覚えると、繰り返し処理をもっと細かくコントロールできる。

これまで、ループの流れを変える文としてbreak文を見てきました。break文は、繰り返し処理そのものを途中で終わらせるための文でしたね。
それに対して、今回学ぶcontinue文は、ループ全体を終わらせるのではなく、その回の残りの処理だけを飛ばして、次の繰り返しへ進むための文です。

たとえば、1回目から10回目まで順番に処理をしている途中で、「3回目だけは表示しない」「特定の条件に合うものだけは今回は飛ばす」といった動きにしたいことがあります。そんなときに役立つのがcontinue文です。

continue文を使うと、現在の繰り返しの中で、それ以降に書かれている処理を実行せずに、次の回へ進めます。break文のようにループ全体を抜けるわけではないので、処理をやめるのではなく、一部だけ飛ばすという感覚で理解するとわかりやすいです。

ここでは、continue文の基本の働き、break文との違い、サンプルプログラムの動き、使いどころや注意点まで、表や例を交えながらやさしく整理していきます。

continue文とは何か

continue文は、現在の繰り返しの残りの処理を中断して、次の繰り返しへ進む文です。

書き方はとてもシンプルです。

continue;

この1文がループの中で実行されると、その回の後続処理は行われず、次の繰り返しへ移ります。

つまりcontinue文は、「この回はここまででよいので、次へ進もう」と指示する文です。

break文との違い

continue文はbreak文とよく似て見えますが、働きはかなり違います。
ここをしっかり区別しておくことが大切です。

役割
break文ループ全体を終了して外へ抜ける
continue文その回の残りを飛ばして次の繰り返しへ進む

たとえば、1から10までのループがあるとき、

  • break文なら、条件に合った時点でループ自体が終わる
  • continue文なら、その回だけを飛ばして、次の番号へ進む

という違いがあります。

continue文の基本イメージ

continue文は、if文と組み合わせて使うことが多いです。
形としては、次のようなイメージです。

for(くり返し){
    if(飛ばしたい条件){
        continue;
    }

    実行したい処理
}

このように書くと、条件に合った回だけは処理をスキップし、それ以外の回は通常どおり処理を進められます。

サンプルプログラム

では、continue文の働きがよくわかるサンプルプログラムを見ていきましょう。

ファイル名:Sample11.java

import java.io.*;

class Sample11
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("何回目のお知らせを飛ばしますか?(1~10)");

        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();
        int skip = Integer.parseInt(str);

        for(int i = 1; i <= 10; i++){
            // 指定した回数なら、この回の残りの処理を飛ばす
            if(i == skip){
                continue;
            }

            System.out.println(i + "回目のお知らせを表示しています。");
        }
    }
}

実行結果の例

たとえば 3 を入力した場合は、次のようになります。

何回目のお知らせを飛ばしますか?(1~10)
3
1回目のお知らせを表示しています。
2回目のお知らせを表示しています。
4回目のお知らせを表示しています。
5回目のお知らせを表示しています。
6回目のお知らせを表示しています。
7回目のお知らせを表示しています。
8回目のお知らせを表示しています。
9回目のお知らせを表示しています。
10回目のお知らせを表示しています。

この結果を見ると、3回目だけが表示されていないことがわかります。

このプログラムのしくみ

このコードでは、for文で1回目から10回目まで順番に処理しています。
ただし、if(i == skip) がtrueになったときには continue を実行するので、その回の後ろにある表示文は実行されません。

つまり、3を入力した場合は、

  • 1回目は表示する
  • 2回目も表示する
  • 3回目はcontinueで飛ばす
  • 4回目以降はまた表示する

という流れになります。

表で見る continue文の動き

3 を入力した場合の動きを表にすると、次のようになります。

iの値i == skipcontinue文表示されるか
1false実行されない表示される
2false実行されない表示される
3true実行される表示されない
4false実行されない表示される
5false実行されない表示される
6false実行されない表示される
7false実行されない表示される
8false実行されない表示される
9false実行されない表示される
10false実行されない表示される

このように、continue文はループ全体を止めているのではなく、その回の表示だけを飛ばしていることがよくわかります。

break文と並べて違いを見る

continue文を理解するには、break文との違いを並べて見るのがいちばんわかりやすいです。

break文のイメージ

for(int i = 1; i <= 10; i++){
    if(i == 3){
        break;
    }
    System.out.println(i);
}

この場合、3になった時点でループそのものが終わるので、表示は1と2だけになります。

continue文のイメージ

for(int i = 1; i <= 10; i++){
    if(i == 3){
        continue;
    }
    System.out.println(i);
}

こちらは3だけを飛ばして、4以降も続きます。

比較表

3のときの動き4以降
break文ループ終了実行されない
continue文その回を飛ばす実行される

この違いはとても重要です。

continue文で「先頭に戻る」とはどういうことか

continue文の説明では、「ブロックの先頭に戻る」と表現されることがあります。
これは、ループの種類によって少し見え方が違いますが、基本的には次の繰り返しに進むという意味です。

for文なら、continue文が実行されたあと、

  1. その回の残りの処理をやめる
  2. for文の増減式へ進む
  3. 次の条件判定を行う
  4. 条件を満たしていれば次の回を始める

という流れになります。

そのため、「同じ回の続きをする」のではなく、「次の回へ切り替わる」と考えると理解しやすいです。

この図で特に伝えたいのは、continue文がループを終わらせるのではなく、その回の後半だけを飛ばすという点です。

注目するとよいポイントは次のとおりです。

注目点意味
continueのあとに次の回へ進むループ自体は続く
後続処理を通らないその回だけ一部をスキップする
条件判定と組み合わせる飛ばす回を柔軟に決められる

continue文はどんな場面で便利か

continue文は、特定の条件に当てはまるものだけを飛ばしたいときに便利です。

場面使い方のイメージ
特定の番号だけ表示しない3回目だけ飛ばす
偶数だけ処理しない偶数のとき continue
不要なデータだけ無視する条件に合わないデータを飛ばす
エラー値を一時的に除外する異常な値の回だけ処理しない

つまりcontinue文は、「全部やめる必要はないけれど、この回だけは実行しない」という場面に向いています。

continue文を使うときの注意点

continue文は便利ですが、使い方によっては流れが見えにくくなることもあります。
そのため、「何を飛ばしているのか」を自分で説明できる形で書くことが大切です。

気をつけたい点

注意点内容
何を飛ばしているか分かりにくいcontinue の下にある処理を確認する
多用すると読みにくい本当に必要な場面で使う
break文と混同しやすいループ終了ではなく次の回へ進むと意識する
条件の位置が大事continue より前と後で何が行われるかが変わる

たとえば、continue文より前に書かれた処理は実行されますが、continue文より後に書かれた処理はその回では実行されません。ここはとても重要です。

continue文の位置によって動きが変わる

continue文は、ループの中のどこに書くかによって、飛ばされる範囲が変わります。

たとえば、次のようなコードを考えてみます。

for(int i = 1; i <= 5; i++){
    System.out.println("前半の処理");
    if(i == 3){
        continue;
    }
    System.out.println("後半の処理");
}

この場合、3回目でも「前半の処理」は表示されます。
でも continue が実行されるので、「後半の処理」は表示されません。

つまりcontinue文は、それより後ろにある処理だけを飛ばすのです。

continue文を学ぶ意味

continue文を理解すると、ループ処理をより細かく調整できるようになります。
ただ最後まで実行するか、途中で全部やめるかだけではなく、

  • この回だけ飛ばす
  • 条件に合うものだけ除外する
  • 不要な処理を省いて次へ進む

といった柔軟な流れが作れるようになるからです。

今回の内容では、continue文は

  • その回の残りの処理を飛ばす
  • ループ全体は終わらない
  • 次の繰り返しへ進む
  • break文とは役割が違う

という点が大切でした。

この考え方が身につくと、入力チェックや条件つきの反復処理など、実際のプログラムでもかなり自然にコードを書けるようになります。