Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのcontinueステートメントの使い方を徹底解説!基本構文からラベル付きcontinueまで

Javaのcontinueステートメントは、ループ内の現在の反復処理(イテレーション)をスキップし、次の反復処理へ移行するための制御構文です。ループ全体を中断することなく、特定の条件に該当する処理だけを飛ばしたい場合に非常に便利です。continueはfor文やwhile文など、さまざまなループで使用できます。

Javaのfor文やwhile文を使うと、繰り返し処理を自動化できます。しかし実際の開発では、「ループの一部だけをスキップして、残りの処理は継続させたい」という場面がよくあります。

たとえば、生徒がテストに合格したかどうかを判定するプログラムを作る場合を考えてみましょう。特定の生徒だけ採点対象から除外したい、といったケースです。

こうしたときに活躍するのがcontinueステートメントです。この記事では、具体的なコード例を交えながら、Javaのcontinueステートメントの使い方をわかりやすく解説していきます。

Javaのcontinueステートメントとは

continueステートメントを実行すると、その時点で実行中の反復処理が中断され、ループの先頭に戻って次の反復処理が開始されます。つまり、continue以降に書かれた処理はその回のループでは実行されません。

基本構文

continue;

continueはキーワードであるため、単独で記述できます。実務では、if文と組み合わせて「特定の条件を満たした場合のみスキップする」という形で使われるのが一般的です。for文でもwhile文でも同様に利用可能です。

それでは、実際のコード例を見ながらcontinueの動作を確認していきましょう。

continueステートメントの使用例①:生徒のテスト結果を判定する

ここでは、5年生の数学クラスの生徒全員が直近のテストに合格したかどうかを判定するプログラムを作成するとします。このプログラムは、生徒名と点数のリストを順番に処理し、各生徒の名前と合否を出力します。

判定基準は以下のとおりです。

  • 17点より高い点数の生徒は合格
  • 17点以下の生徒は不合格

ただし、Lucyという生徒はテスト当日に欠席していたため、合否判定の対象から除外する必要があります。そこでcontinueステートメントを使い、Lucyの判定処理をスキップします。

以下のコードで、Lucy以外の生徒の合否を判定できます。

class CalculateTestScores {
	public static void main(String[] args) {
		String[] students = {"Mark", "Bill", "Lucy", "Chloe"};
		int grades[] = {16, 25, 0, 19};

		for (int i = 0; i < students.length; ++i) {
			if (students[i].equals("Lucy")) {
				continue;
			}
			if (grades[i] > 17) {
				System.out.println(students[i] + " has passed their test with the grade " + grades[i] + ".");
			} else {
				System.out.println(students[i] + " has failed their test with the grade " + grades[i] + ".");
			}
		}
	}
}

このコードを実行すると、次の出力が得られます。

Mark has failed their test with the grade 16.
Bill has passed their test with the grade 25.
Chloe has passed their test with the grade 19.

コードの解説

まず、プログラムのコードを格納するためのクラスCalculateTestScoresを宣言しています。続いて2つの配列を定義しました。studentsには生徒名のリストが、gradesにはそれぞれの生徒の点数が格納されています。

次にforループを初期化し、students配列の要素を1つずつ処理していきます。ループ内では以下の処理が実行されます。

  1. 生徒名が「Lucy」と一致するかチェック
    • 一致する場合:continueが実行され、以降の処理をスキップして次の反復へ移ります。
    • 一致しない場合:そのままループ内の処理を続行します。
  2. 点数が17より大きいかチェック
    • 17より大きい場合:「[生徒名] has passed their test with the grade [点数].」(合格)というメッセージがコンソールに出力されます。
    • 17以下の場合:「[生徒名] has failed their test with the grade [点数].」(不合格)というメッセージが出力されます。

このように、プログラムがLucyの名前に到達したときには、continueによって採点処理が丸ごとスキップされていることがわかります。

continueステートメントの使用例②:掛け算ゲームを作る

次に、3年生向けの算数ゲームを例に挙げます。このゲームでは、ユーザーが入力した1〜10までの数字を3つ掛け合わせます。もしユーザーが10より大きい数字を入力した場合は、その数字を掛け算の対象から除外したいとしましょう。

このタスクは、以下のコードで実現できます。

import java.util.Scanner;

class MathGame {
	public static void main(String[] args) {
		int total = 1;
		Scanner input = new Scanner(System.in);

		for (int i = 0; i < 3; ++i) {
			System.out.print("Enter a number: ");
			int number = input.nextInt();

			if (number > 10) {
				continue;
			}

			total = total * number;
		}
		System.out.println("Total = " + total);
	}
}

このプログラムに「2」「5」「4」を入力すると、次の出力が得られます。

Enter a number: 2
Enter a number: 5
Enter a number: 4
Total = 40

2 × 5 × 4 = 40です。入力されたすべての数字が10以下だったため、continueステートメントは一度も実行されず、すべての値が掛け合わされました。

一方、「2」「5」「11」を入力した場合はどうなるでしょうか。結果は以下のとおりです。

Enter a number: 2
Enter a number: 5
Enter a number: 11
Total = 10

11が入力された時点でcontinueステートメントが実行され、totalと11の掛け算がスキップされます。そのため、totalは2 × 5 = 10のまま出力されたのです。

breakとの違い

continueは、breakステートメントとセットで比較されることが多い構文です。両者の違いは以下のとおりです。

  • break:それを囲んでいるループ自体を完全に終了させる
  • continue:現在の反復処理だけをスキップし、ループは継続する

「ループを打ち切りたいのか、一部の処理だけ飛ばしたいのか」によって、適切な方を選択することが重要です。

ラベル付きcontinueステートメント

Javaにはラベル付きcontinueという機能もあります。これを使うと、ネストされた(入れ子になった)複数のループの中で、指定した外側のループまで一気にスキップできます。

使い方は簡単で、continueキーワードの後に外側のループに付けたラベル名を指定するだけです。

continue label_name;

たとえば、2つのループが入れ子になっているプログラムで、内側のループから外側のループの次の反復へスキップしたい場合は、次のように記述します。

label_name:
while (true) {
	while (true) {
		if (condition_is_met) {
			continue label_name;
		}
	}
}

通常のcontinueは最も内側のループにしか作用しませんが、ラベルを付けることで制御対象のループを明示的に指定できるのが大きな特徴です。

まとめ

Javaのcontinueステートメントは、ループ内の特定の反復処理の実行をスキップするために使われる制御構文です。

この記事では、continueステートメントを使ったプログラムのフロー制御方法を、2つの具体例とともに解説しました。さらに、ネストされたループで外側のループへスキップできる「ラベル付きcontinue」の基本についても触れました。

continueとbreakの違いをしっかり理解すれば、ループ処理の自由度がぐっと高まります。ぜひ実際にコードを書いて、プロのようにcontinueステートメントを使いこなせるようになりましょう!

  1. JavaのMath.random()メソッド徹底解説!乱数生成の基本から範囲指定まで

    JavaのMath.random()メソッドは、0.0以上1.0未満の擬似乱数(疑似ランダムな数値)を生成するためのメソッドです。生成された乱数に別の数値を掛けることで、0〜1以外の任意の範囲の乱数を取得することもできます。結果が0になることはあっても、1以上になることはありません。 プログラミングで乱数が必要になる場面 プログラミングをしていると、ランダムな数値を生成したい場面によく出会います。例えば、クルーズ船会社を運営しているとしましょう。顧客の注文番号として使う予約参照番号をランダムに生成したり、数当てゲーム用のランダムな数字を作りたいといったケースが考えられます。 Javaには、乱

  2. 【初心者向け】JavaScriptのcontinueステートメントの使い方を解説

    continueステートメントとはJavaScriptのcontinueステートメントは、ループ処理の中で特定の条件が満たされた場合に、その回の処理(イテレーション)をスキップし、次の反復へ処理を移すために使用されます。breakステートメントがループ自体を抜けるのに対し、continueはあくまで「その回だけ」を飛ばしてループを継続する点が特徴です。この仕組みにより、不要なデータを除外しながら効率的に繰り返し処理を行うことができます。continueステートメントの実装例以下は、1から30までの数値の中から偶数のみを出力するサンプルコードです。奇数の場合にcontinueを使って処理をスキッ