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

Javaのwhileループとは?基本構文からdo...while文・無限ループ対策まで徹底解説

プログラミングでは、同じ作業を何度も繰り返し実行したい場面によく出会います。ループ(繰り返し処理)を使えば、こうした反復タスクを自動化でき、より効率的なコードを書くことができます。

Javaのwhile文とdo...while文は、特定の条件が満たされている間、コードブロックを繰り返し実行するための構文です。これらは条件分岐のif文に似ていますが、if文は条件がtrueの場合に一度だけ処理を実行するのに対し、whileループは条件がfalseになるまで処理を続け続ける点が大きく異なります。

この記事では、Javaにおけるwhile文とdo...while文の基本を解説し、実際のサンプルコードを通してそれぞれの使い方を見ていきます。

Javaのwhileループとは

whileループは、指定した条件式がtrueと評価される間、コードブロックを繰り返し実行します。書き方は従来のif文とよく似ています。Javaのwhileループの基本構文は次のとおりです。

while (condition_is_met) {
	// 実行するコード
}

whileループは、まず括弧内の条件式を評価します。Boolean型の式がtrueであればループ本体が実行され、その後もう一度条件式が評価されます。このプロセスは条件式がfalseになるまで続き、falseになった時点でwhileループは停止し、プログラムの残りの部分が実行されます。

具体例で確認しましょう。あなたが大工で、お店で新しいテーブルの販売を始めることになったとします。製作できるのは最大5脚までで、それ以降の注文希望者はウェイティングリストに登録することにします。

ここで「あと何人まで注文を受け付けられるか」を教えてくれるプログラムを作りたいとしましょう。これはwhileループを使えば簡単に実装できます。注文数が上限に達していない間だけ、ループ本体を実行すればよいのです。

int limit = 5;

int orders_made = 0;

while (orders_made < limit) {
	orders_made++;
	int capacity = limit - orders_made;
	String message = "あと" + capacity + "脚のテーブルが注文できます。";
	System.out.println(message);
}

このコードを実行すると、次のような結果が出力されます。

あと4脚のテーブルが注文できます。
あと3脚のテーブルが注文できます。
あと2脚のテーブルが注文できます。
あと1脚のテーブルが注文できます。
あと0脚のテーブルが注文できます。

コードの流れを順番に見ていきましょう。最初の行では、製作できるテーブルの最大数を管理する変数limitを宣言しています。次に、受け付けた注文数を保存する変数orders_madeを宣言します。

その後、プログラムはorders_madelimitより小さい間だけ実行されるwhileループに入ります。ループ内では、インクリメント演算子orders_made++を使って注文数を1ずつ増やします。

インクリメントの実行後、limitからorders_madeを引いて残りの受注可能数を計算し、「あと◯脚のテーブルが注文できます」というメッセージをコンソールに出力します。

そしてorders_madelimitに達した時点で、while文の実行は終了します。

Javaのdo...whileループとは

do...whileループはwhileループの一種です。条件式を判定する前に、doブロック内のコードを必ず一度実行する点が特徴で、その後は条件がtrueである限りループを繰り返します。

両者の違いは、whileループが先に条件を評価してからコードブロックを実行するのに対し、do...whileループはコードブロックを先に実行してから条件を評価するという点です。

do...whileループの構文は以下のとおりです。

do {
	// 実行するコード
} while (condition_is_met);

例を使って動作を説明しましょう。1〜10の数字を当てる数当てゲームを作るとします。ユーザーには、正解かどうかを判定する前にまず数字を入力してもらい、もし外れたらもう一度挑戦するよう促したい。こうした処理はdo...whileループで実現できます。

ユーザーに数字の入力を求め、do...whileループで正解判定を行うプログラムの例がこちらです。

import java.util.Scanner;

class GuessingGame {
	public static void main(String[] args) {

		int number = 8;
		int guess = 0;

		Scanner input = new Scanner(System.in);
		do {
			System.out.print("1から10までの数字を入力してください: ");
			guess = input.nextInt();
		} while (number != guess);

		System.out.println("正解です!");
	}
}

このコードを実行すると、do...whileループの条件が評価される前に、まず数字の入力を求められます。何度か外してから正解を入力した場合の実行結果は次のとおりです。

1から10までの数字を入力してください: 9
1から10までの数字を入力してください: 1
1から10までの数字を入力してください: 4
1から10までの数字を入力してください: 5
1から10までの数字を入力してください: 8
正解です!

コードを分解してみましょう。まず、ユーザーの入力を受け取るためにjava.util.Scannerクラスをインポートします。次に、プログラム全体を格納するGuessingGameクラスを定義します。

続いて2つの変数を定義します。1つは当てるべき数字を保持するnumber、もう1つはユーザーの回答を保持するguessです。

その後、Scannerを使ってユーザー入力の準備を行い、「1から10までの数字を入力してください」というメッセージをコンソールに出力して、input.nextInt()メソッドで入力された数字を取得します。

ここまでのコードが実行された後、do...whileループは、ユーザーが入力した数字が正解と一致しているかどうかを判定します。外れていればdoブロックの中身が再度実行され、正解していればループは終了し、「正解です!」というメッセージがコンソールに出力されます。

無限ループに注意しよう

無限ループとは、永遠に実行が止まらないループのことです。条件式が常にtrueのままになると、ループは際限なく回り続け、最悪の場合プログラムがクラッシュすることもあります。そのため、whileループには必ずどこかで終了する仕組みを持たせることが重要です。

Javaにおける無限ループの典型例は次のとおりです。

while (true) {
	// 実行するコード
}

このループは無限に実行されます。ただし、break文を使えば強制的に抜け出すことができます。例として、在庫のテーブル数を管理するプログラムを作ってみましょう。在庫は5脚のみで、在庫がなくなったらwhileループを停止させます。以下のコードでこの要件を実現できます。

Boolean tables_in_stock = true;
int orders_made = 0;

while (tables_in_stock) {
	orders_made++;
	if (orders_made == 5) {
		System.out.println("在庫切れです。");
		break;
	} else {
		int tables_left = 5 - orders_made;
		String message = "在庫はあと" + tables_left + "脚あります。";
		System.out.println(message);
	}
}

このコードを実行すると、次のような結果が出力されます。

在庫はあと4脚あります。
在庫はあと3脚あります。
在庫はあと2脚あります。
在庫はあと1脚あります。
在庫切れです。

この例では、tables_in_stockがtrueである限りwhileループは実行され続けます。しかし、コード中にはtables_in_stockをfalseに変更する処理がどこにもありません。

そこで、orders_madeが5になったときに実行されるbreak文を使用しています。

つまり、注文数が5未満の間は「在庫はあと◯脚あります。」というメッセージが出力され、orders_madeが5に達した時点で「在庫切れです。」というメッセージが表示されるとともにbreak文が実行され、while文が停止します。

まとめ

Javaのwhileループは、条件式がtrueである間、特定のコードブロックを実行し続け、条件がfalseになった時点で停止します。do...whileループは、まずコードブロックを一度実行してから条件を評価し、ループを継続するかどうかを判断します。

この記事では、Javaにおけるwhileループとdo...whileループの使い方を解説しました。さらに無限ループのリスクとbreak文による回避方法についても、具体的なサンプルコードとともに紹介しました。これで、あなたもプロのようにJavaのwhile文とdo...while文を扱えるようになったはずです!

  1. JavaScriptのwhileループとは?基本構文と動作例をわかりやすく解説

    whileループは、指定した条件式がtrue(真)である限り、特定の文やコードブロックを繰り返し実行するための制御構造です。条件式がfalse(偽)に評価された瞬間に、ループは終了し、その後の処理へと進みます。 whileループの基本構文 while (条件式) { // 繰り返し実行したい処理 } whileループは、まず最初に条件式を評価します。条件がtrueであればブロック内の処理を実行し、再び条件式に戻って評価を行います。この流れを図にすると以下のようになります。 サンプルコード 実際に簡単な例を見てみましょう。変数 i をカウンターとして使い、5回「Hello」を出力するプ

  2. 【SQL Server入門】WHILEループの使い方|構文・フローチャート・実行例を徹底解説

    WHILEループ(WHILE LOOP)は、指定した条件がTRUEを返す限り、コードを繰り返し実行したい場合に使用する制御構文です。この記事では、基本構文と具体的なサンプルコードをもとに、SQL ServerにおけるWHILEループの使い方をわかりやすく解説します。 WHILEループの基本構文 SQL ServerでWHILEループを使用する際は、以下の構文に従います。 WHILE 条件式BEGIN    { 条件がTRUEのときに実行される処理 }END; ポイント: 実行回数が事前に確定していない場合に、WHILEループを利用します。 WHILE