Java道|continue文のしくみと使い方

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

これまで、ループの流れを変える文として break文 を学んできました。

break文 は、for文、while文、do~while文 などの繰り返し処理を途中で終了し、ループの外へ抜けるための文でした。
たとえば、10回繰り返す予定でも、5回目で目的のものが見つかったら、その時点でループを終えられます。

一方で、今回学ぶ continue文 は、ループ全体を終わらせる文ではありません。

continue文 は、現在の繰り返しの残りの処理だけを飛ばして、次の繰り返しへ進むための文です。

つまり、break文 が「ここで修行を終了する合図」だとすれば、continue文 は「今回はこの先の動きを飛ばして、次の型へ進む合図」です。

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

この記事では、具体的な例示プログラムは Sample11.java のみを使い、continue文 の基本、break文 との違い、for文の中での動き、continue文 の位置による違い、使いどころや注意点までを、鬼滅の刃風の世界観にたとえながら整理します。

鬼滅の刃風にたとえると、continue文 は「この回の型だけは省略して、次の修行回へ進む」という指示です。
修行全体をやめるわけではありません。
ただ、その回の後半の動きだけを飛ばし、次の回へ移ります。

continue文とは何か

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

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

continue;

この1文がループの中で実行されると、その回の後ろに書かれている処理は実行されません。

ただし、ループ全体が終わるわけではありません。
次の繰り返しへ進みます。

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

continue文 は、「この回はここまででよいので、次の回へ進もう」とJavaに伝える文です。

鬼滅の刃風にたとえると、10回の型修行をしている途中で、3回目だけ足場が悪くて後半の型を省略するようなものです。
修行そのものは続きます。
3回目だけを飛ばし、4回目の型へ進みます。

break文との違い

continue文 は break文 と見た目が似ています。
どちらもループの流れを変える文です。

ただし、動きは大きく違います。

ループ全体現在の回の後続処理次の回
break文終了する実行しない進まない
continue文終了しない実行しない進む

break文 は、ループそのものを終わらせます。

一方、continue文 は、ループそのものは続けます。
ただし、現在の回の残りの処理だけを飛ばします。

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

条件break文の場合continue文の場合
i が 3 になったループを終了する3回目だけ飛ばす
4以降実行されない実行される

ここがとても重要です。

鬼滅の刃風にたとえると、break文 は「任務をここで終了して撤収する合図」です。
continue文 は「この場所の確認だけ飛ばして、次の場所へ進む合図」です。

continue文の基本イメージ

continue文 は、if文 と組み合わせて使うことが多いです。

なぜなら、「どの回を飛ばすのか」は条件で決めることが多いからです。

基本の形は次のようになります。

for(繰り返しの設定){
    if(飛ばしたい条件){
        continue;
    }

    実行したい処理;
}

↓クリックすると拡大表示されます。

この形では、if文 の条件が true になった回だけ、continue文 が実行されます。

continue文 が実行されると、その下にある 実行したい処理 は、その回では実行されません。
そして、次の繰り返しへ進みます。

部分役割
for文繰り返しを行う
if文飛ばす条件を判定する
continue文その回の残りを飛ばす
continue文の下の処理条件に当てはまらない回だけ実行される

鬼滅の刃風にたとえると、if文 は「この回を飛ばすべきか判断する札」です。
continue文 は、その札が true になったときに発動する「次の回へ進め」という合図です。

図:continue文はその回だけを飛ばす

↓クリックすると拡大表示されます。

この図が示していること

この図では、continue文 が実行されたときに、その回の後続処理だけが飛ばされることを示しています。

i == skip が true になると、continue文 が実行されます。
その場合、下にある表示処理は実行されません。
ただし、ループ全体は終了せず、次の回へ進みます。

ここから分かることは、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 + "回目の任務連絡を表示しています。");
        }
    }
}

このプログラムでは、for文 によって i を 1 から 10 まで変化させています。

for(int i = 1; i <= 10; i++)

そして、次のif文で、現在の回数 i が、入力された skip と等しいかどうかを調べています。

if(i == skip){
    continue;
}

i == skip が true になった場合、その回では continue文 が実行されます。

すると、その下にある表示処理は実行されません。

System.out.println(i + "回目の任務連絡を表示しています。");

つまり、指定した回数だけ表示が飛ばされます。

鬼滅の刃風にたとえると、1回目から10回目まで任務連絡を出す予定ですが、指定された回だけは「今回は連絡を省略して次へ進む」という流れになります。

3を入力した場合の実行結果

3 を入力した場合、skip の値は 3 になります。

実行例

何回目の任務連絡を飛ばしますか?(1~10)
3
1回目の任務連絡を表示しています。
2回目の任務連絡を表示しています。
4回目の任務連絡を表示しています。
5回目の任務連絡を表示しています。
6回目の任務連絡を表示しています。
7回目の任務連絡を表示しています。
8回目の任務連絡を表示しています。
9回目の任務連絡を表示しています。
10回目の任務連絡を表示しています。

この結果を見ると、3回目だけが表示されていません。

ただし、4回目以降はきちんと表示されています。

ここが continue文 の大切なところです。
3回目でループが終わったのではありません。
3回目だけを飛ばして、4回目へ進んでいます。

Sample11.javaの処理の流れ

3 を入力した場合の流れを表で整理すると、次のようになります。

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

i が 3 のときだけ、i == skip が true になります。
そのため、continue文 が実行されます。

continue文 が実行されると、その回の下にある表示処理は飛ばされます。
しかし、for文自体は続きます。

そのため、4回目以降は通常どおり表示されます。

break文とcontinue文を並べて考える

continue文 を理解するには、break文 と並べて考えると分かりやすいです。

たとえば、i が 3 になったときに break文 を使う場合です。

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

    System.out.println(i);
}

この場合、i が 3 になった時点でループ全体が終了します。

表示されるのは、1 と 2 だけです。
4以降は実行されません。

一方、continue文 の場合は次のようになります。

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

    System.out.println(i);
}

この場合、i が 3 の回だけが飛ばされます。

表示されるのは、1、2、4、5、6、7、8、9、10 です。

i が 3 のときの動き4以降
break文ループ全体を終了する実行されない
continue文3回目だけを飛ばす実行される

鬼滅の刃風にたとえると、break文 は「3回目で修行を終了する」動きです。
continue文 は「3回目の後半だけ省略して、4回目の修行へ進む」動きです。

図:break文とcontinue文の違い

↓クリックすると拡大表示されます。

この図が示していること

この図では、break文 と continue文 の違いを比較しています。

左側の break文 は、i が 3 になった時点でループ全体を終了します。
そのため、4以降は実行されません。

右側の continue文 は、i が 3 の回だけ表示処理を飛ばします。
ただし、ループは終わらないため、4以降は通常どおり実行されます。

ここから分かることは、break文 は「ループを終える文」、continue文 は「その回だけを飛ばす文」だということです。

continue文で次の繰り返しへ進むとはどういうことか

continue文 の説明では、「次の繰り返しへ進む」と表現します。

for文 の中で continue文 が実行された場合、基本的には次の流れになります。

順番動き
1continue文 が実行される
2その回の残りの処理を飛ばす
3for文の変化式へ進む
4条件式を確認する
5条件が true なら次の回を始める

Sample11.java なら、i が 3 のときに continue文 が実行されます。

if(i == skip){
    continue;
}

この時点で、下の表示処理は実行されません。

System.out.println(i + "回目の任務連絡を表示しています。");

そのあと、for文の i++ へ進みます。
i は 4 になり、条件 i <= 10 を確認します。
条件が true なので、4回目の処理に進みます。

つまり、continue文 は「同じ回の続きをする」のではなく、「次の回へ切り替える」文です。

鬼滅の刃風にたとえると、3回目の型の後半を省略し、すぐに4回目の型へ進むような流れです。

continue文の位置によって飛ばされる範囲が変わる

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

大切なのは、continue文 より前にある処理は実行されるということです。
一方で、continue文 より後ろにある処理は、その回では実行されません。

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

for(int i = 1; i <= 5; i++){
    System.out.println("前半の処理です。");

    if(i == 3){
        continue;
    }

    System.out.println("後半の処理です。");
}

この場合、i が 3 のときでも、前半の処理です。 は表示されます。

しかし、continue文 が実行されるため、その下にある 後半の処理です。 は表示されません。

i の値前半の処理continue文後半の処理
1実行される実行されない実行される
2実行される実行されない実行される
3実行される実行される実行されない
4実行される実行されない実行される
5実行される実行されない実行される

continue文 は、「ループ内のどこに置くか」がとても重要です。

鬼滅の刃風にたとえると、前半の型を出したあと、「今回は後半の型を省略」と判断して次の回へ進むような流れです。
continue文 の前の動きは済んでいます。
continue文 の後ろの動きだけが飛ばされます。

continue文が便利な場面

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

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

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

たとえば、データを順番に確認していて、空のデータだけは処理せず次へ進みたい場合があります。
このようなときに continue文 を使うと、不要な回だけを飛ばして、全体の処理は続けられます。

鬼滅の刃風にたとえると、修行場を順番に巡回しながら、使用できない訓練場だけを飛ばして次へ進むようなものです。
任務全体は続きますが、その場所だけは省略します。

continue文を使うときの注意点

continue文 は便利ですが、使い方によっては処理の流れが見えにくくなることがあります。

特に、continue文 より下にある処理がその回で実行されない点に注意が必要です。

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

for文の場合、continue文 が実行されると、その後に変化式へ進みます。

しかし、while文で continue文 を使う場合は、更新処理の位置に注意が必要です。
更新処理を continue文 より後ろに置いてしまうと、その回では更新されず、条件が変わらないままになる可能性があります。

学習の最初は、まず for文 の中での動きをしっかり理解すると安心です。

continue文を読むときのポイント

continue文 を読むときは、次の順番で確認すると分かりやすくなります。

順番見ること
1どのループの中にあるか
2どの条件で continue文 が実行されるか
3continue文 より前に何があるか
4continue文 より後ろに何があるか
5continue文 のあと次の回へどう進むか

Sample11.java なら、次のように整理できます。

見るポイント内容
ループi を 1 から 10 まで進める for文
continue条件i == skip
continue文 より前条件判定
continue文 より後ろ任務連絡の表示
continue後表示せず次の回へ進む

この見方をすると、continue文 が何を飛ばしているのかがはっきり見えます。

continue文を学ぶ意味

continue文 を理解すると、繰り返し処理をより細かく調整できるようになります。

これまでのループ処理では、基本的に「最後まで繰り返す」か「break文でループ全体を終える」かが中心でした。
continue文 を使うと、その間のような制御ができます。

つまり、ループ全体は続けながら、特定の回だけ一部の処理を省略できます。

continue文でできること内容
その回だけ処理を飛ばす条件に合う回をスキップできる
ループ全体は続けるbreak文のように終了しない
不要なデータを除外する処理対象から外せる
条件に合わない回を省く必要なものだけ処理しやすい
ループ内の流れを整理する早めに次の回へ進める

continue文で特に大切なのは、次の4つです。

大切なこと内容
continue文はその回の残りを飛ばす後ろの処理は実行されない
ループ全体は終わらない次の繰り返しへ進む
break文とは役割が違うbreak文はループ終了、continue文は回のスキップ
continue文の位置が重要どこから後ろを飛ばすかが変わる

鬼滅の刃風にたとえると、continue文 は「この回の任務確認はここまで。次の確認へ進め」という札です。
任務全体を終えるわけではありません。
ただ、その回だけを省略して、次の回へ進みます。

この考え方が身につくと、入力チェック、データ処理、条件つきの繰り返しなどで、不要な処理だけを自然に飛ばせるようになります。