Javaコラム Javaエンジニアのためのお役立ちコラム

Java

Javaのcontinue文を活用しよう!|continue文にwhileを使ってみよう

2020年10月25日
SE
Javaにはcontinueとはどのような言葉でしょうか。
PM
continueはコンティニューと読み、中断したゲームを再開して続ける時によく使われる言葉です。

Javaのcontinueとは?


Javaにはcontinueという文法があります。コンティニューと読み、中断したゲームを再開して続ける時によく使われる言葉です。

Javaのcontinueは続けるという意味が含まれるゲームとは違い、「スキップして続ける」と言う意味を持っています。Javaのcontinueはfor文やwhile文といったループ処理で使用され、なくてはならない機能です。

Java初心者でまだ知らない人は、是非この記事を読んでcontinueの使い方を学んでください。

continue文のシンプルな例

以下はcontinueを使った非常にシンプルなJavaサンプルです。

for (int i = 0; i < 5; i++) {
if (i==2) continue;
System.out.println(i+””周目です。””);
}

実行結果は以下のようになります。

0周目です。
1周目です。
3周目です。
4周目です。

iを1ずつ増やしながら0から4までの間繰り返すforループで、iが2の時にcontinueを呼んでいます。するとその後のprintlnが実行されませんが、その後もループ処理は続けられます。このようにcontinueは「スキップして続ける」という機能を持つのです。

continueの実用的な例

continueのもう少し実用的な例としては、以下のJavaサンプルをご覧ください。

String[] ary = {
“”りんご””, “”みかん””, “”腐ったみかん””, “”梨””
};
for (int i = 0; i < ary.length; i++) {
if (ary[i].contains(“”腐った””)) {
System.out.println(ary[i]+””は捨てます。””);
continue;
}
System.out.println(ary[i]+””を食べます。””);
}

continueはループ処理のスキップに役立つ

上のJavaサンプルの実行結果は以下になります。

りんごを食べます。
みかんを食べます。
腐ったみかんは捨てます。
梨を食べます。

文字配列に「腐った」と言う言葉があった場合は、それを捨てると表示してcontinueで次をチェックしています。continueをどのような場合に使うかが分かって来たのではないでしょうか。

拡張for文にもcontinueは使える

Javaには拡張for文という構文があります。それにもcontinueが使用できます。上記サンプルを拡張for文に直すと、以下のようになります。

String[] ary = { “”りんご””, “”みかん””, “”腐ったみかん””, “”梨”” };

for (String s : ary) {
if (s.contains(“”腐った””)) {
System.out.println(s + “”は捨てます。””);
continue;
}
System.out.println(s + “”を食べます。””);
}

結果は上記サンプルと同じになります。

多重ループのcontinueの動作

多重ループの場合にcontinueはどのような動作をするのでしょうか。以下のJavaサンプルを見てください。

for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j==2) continue;
System.out.println(i+”” x “”+j+”” = “”+i*j);
}
}

実行結果は以下になります。continueは内側のループだけに作用しています。

1 x 1 = 1
1 x 3 = 3
2 x 1 = 2
2 x 3 = 6
3 x 1 = 3
3 x 3 = 9

ラベル付きcontinue文

上のようなケースの場合、continueで外側のループに処理を移したい場合はどうすれば良いでしょうか。実はcontinueにはラベルを付けることができます。以下のJavaサンプルを実行してみてください。

LOOP_OUT: for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j==2) continue LOOP_OUT;
System.out.println(i+”” x “”+j+”” = “”+i*j);
}
}

実行結果は以下のようになります。jが2だった場合、外側のループまで処理が飛んでいるのがわかります。

1 x 1 = 1
2 x 1 = 2
3 x 1 = 3

Javaでラベルはあまり使用されない

ただ、Javaでこのサンプルのようにラベルが使われることは実際はあまりありません。古い言語のアセンブラやBASICではJUMPやGOTOという処理を移動する命令が多用されましたが、このような命令はプログラムを非常に読みづらくして処理が無駄に複雑になります。

Javaのラベルも同様の理由であまり使われることはありませんが、実はJavaにはそういう機能があるという豆知識くらいにとどめておくのが良いでしょう。

whileループでもcontinueは使える

ここまでfor文でのcontinueの使い方について説明してきましたが、while文でもcontinueは使用できます。以下がそのJavaサンプルです。

int i = 0;
while(i++<5) {
if (i==2) continue;
System.out.println(i+””周目です。””);
}

結果は以下になります。iが2の時にそれ以後の処理がスキップされています。

1周目です。
3周目です。
4周目です。
5周目です。

do~whileループでもcontinueは使える

do~while文でも同様にcontinueは使えます。以下がそのJavaサンプルです。

int i = 0;
do {
if (i==2) continue;
System.out.println(i+””周目です。””);
} while(i++<5);

結果は以下になります。

0周目です。
1周目です。
3周目です。
4周目です。
5周目です。

switch文でbreakの代わりにcontinueが使える

switch文ではbreakが使われますが、その代わりに以下のようにcontinueを使うこともできます。

for (int i = 0; i < 5; i++) {
switch(i) {
case 2:
continue;
default:
System.out.println(i+””周目です。””);
break;
}
}

結果は以下になります。なおこのサンプルでcontinueの後にbreakを記述すると、到達できないコードと言う理由でエラーになります。continueを代わりに使えるというより、使わざるを得ないというのが正しいです。

0周目です。
1周目です。
3周目です。
4周目です。

try~finallyでcontinueを使う時は注意

continueをtry文で使う場合は、finallyに注意しましょう。以下のJavaサンプルをご覧ください。

for (int i = 0; i < 3; i++) {
try {
if (i==1) continue;
System.out.println(i+””周目のtryです。””);
}
catch (Exception e) {
}
finally {
System.out.println(i+””周目のfinallyです。””);
}
}

結果は以下になります。

0周目のtryです。
0周目のfinallyです。
1周目のfinallyです。
2周目のtryです。
2周目のfinallyです。

iが1の時にcontinueでスキップしますが、finallyが実行されてしまっています。finally節は必ず実行されるというルールなのでこうなります。continueのスキップは絶対ではないということです。

streamでcontinueは使用不可

Java 8にはstreamと言う新機能が追加されました。これはデータの集合体に一律で処理を行う記述をシンプルに出来ます。streamにはforEachという機能がありますが、これにcontinueは使えるのでしょうか。なおソースの先頭に「import java.util.*;」を記述してください。

List<Integer> l = Arrays.asList(1, 2, 3);
l.stream().forEach(i -> {
if (i==2) continue;
System.out.println(i+””周目です。””);
});

このように記述しても、エラーになってしまいます。streamのforEachにはcontinueは使えません。
ただしstreamのforEachでもcontinueと同様のことはできます。上のサンプルのcontinueをreturnに変えてみましょう。するとエラーにはならず、実行すると以下の結果になります。

1周目です。
3周目です。

iが2の時はそれ以後の処理がスキップできています。streamのforEachではreturnで抜けて次の処理ができることを覚えておきましょう。

SE
いろいろなループ処理でcontinueが使えるのですね。
PM
Javeではcontinueを使用する機会が多いので、しっかりと理解しておきましょう。

Javaのループ処理でスキップする時はcontinue

Javaのcontinueについて解説しましたが、ご理解頂けましたでしょうか。

実際にJavaを使うとcontinueを使う機会は意外と多いので、しっかり押さえてください。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags