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

- システム
エンジニア - Javaにはcontinueとはどのような言葉でしょうか。
- プロジェクト
マネージャー - 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で抜けて次の処理ができることを覚えておきましょう。
- システム
エンジニア - いろいろなループ処理でcontinueが使えるのですね。
- プロジェクト
マネージャー - Javeではcontinueを使用する機会が多いので、しっかりと理解しておきましょう。
Javaのループ処理でスキップする時はcontinue
Javaのcontinueについて解説しましたが、ご理解頂けましたでしょうか。
実際にJavaを使うとcontinueを使う機会は意外と多いので、しっかり押さえてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)