continue文とは
contine文は反復処理を行う際に利用でき、continue文に到達するとcontinue以下の処理は行わず、再度ループを行うかどうかの判断に移行します。
continueの利用
continueはその場所に到達した時点で処理は中断されます。continueは、for文であれば増減式へ、whileであれば条件の部分に移行します。
(この記事中の中断は終わるという意味ではなく、continue以下の処理を実行せずループを続けることを指します)
breakと同様に条件を付けずにcontinueを記述することはできますが、以下のような文はコンパイルエラーとなります。
1 2 3 4 |
for(int i = 0; i < 10; i++){ continue; System.out.println("表示"); } |
System.out.println(“表示”);
^
エラー1個
continueで次の処理が強制的に増減式に移行するため、表示処理まで到達できないことが原因で、コンパイルエラーが起こります。
continueと表示処理の行を入れ替えるとコンパイルエラーは起こりませんが、continue以下が実行されないため、表示は一度も行われず反復処理の意味がなくなってしまいます。
continueはbreakは同様、条件分岐と組み合わせて利用し、「条件に合致した場合にcontiune以下は実行しない」という流れをつくります。
continue文 サンプルプログラム
以下のプログラムを「Number20.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
1 2 3 4 5 6 7 8 9 |
class Number20{ public static void main(String[] args){ //iが3で割り切れる場合はcontinue for(int i = 0; i < 10; i++){ if(i % 3 == 0) continue; System.out.println(i); } } } |
実行例
C:\work>javac Number20.java
C:\work>java Number20
1
2
4
5
7
8
※実行例はコンパイルから実行までの例を表示しています。
continueの特徴と注意点
複数のループ処理がネストされている場合はbreak同様、continueを記述した場所によって、どのループ処理を中断するかが異なります。
例えば、一番内側のループ内にcontinueが記述されている場合は一番内側のループ処理のcontinue以下は実行されません。しかし、その外側のループは影響しません。
2重ループの内側にcontinueがある場合
2重ループの外側にcontinueがある場合
また、continueもifなどの条件分岐を中断させる文ではないので、ifが何重になっていても、continueが記述されている直近のループを中断させることになります。
複数のifに囲まれているcontinueがあった場合
1 2 3 4 5 6 7 8 |
for(int i = 0; i < 10; i++){ if(i % 3 == 0){ if( i % 2 == 0){ continue; //forを中断し増減式へ } } System.out.println(i); } |
1 2 3 4 5 6 7 |
int count = 0; while(count < 10){ //条件に合致した場合continue if(count % 3 == 0) continue; System.out.println(count); count++; } |
次のループはcountがインクリメントされていないため、再度条件に当てはまりcontinueが実行されてしまいます。
上記プログラムでは、continueする前にcountをインクリメントを行う必要があります。
1 2 3 4 5 6 7 8 9 10 |
int count = 0; while(count < 10){ //条件に合致した場合continue if(count % 3 == 0){ count++; //contiuneする前にインクリメント continue; } System.out.println(count); count++; } |
contiune文 復習問題
- continueは○処理を一旦中断させ、再度○処理を継続させることができる構文である。○に入る語句を選んでください。
- 以下のプログラムを記述するとどのような結果になるか選んでください。
1234for(int i = 0; i < 10; i++){System.out.println("表示");continue;} - 数字を偶数のみ表示したい。次のプログラムの□に入る記述を選んでください。
123456for(int i = 1; i < 11; i++){if(□){continue;}System.out.println(i);} - お疲れ様でした。
-
- 分岐
- 反復
- 順次
- 逐次
-
- 「表示」という文字が10回表示される
- 「表示」という文字が1度だけ表示される
- コンパイルエラー
- 実行時エラー
-
- i % 3 == 0
- i % 3
- i % 2 == 0
- i % 2
まとめ
- continueは、continue以下の処理は実行しないがループ処理は継続する
- 基本的にはifと組み合わせて利用される
- ループがネストされている場合は直近のループのみが対象となる
- while文内にインクリメントやデクリメントがある場合は無限ループにならないように注意