Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java入門
  4. Javaのcontinue文を活用しよう!|continue文にwhileを使ってみよう

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

  • Java入門
公開日時:   更新日時:
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