while文は、Javaにおける基本的な繰り返し処理の1つ。指定した条件が真(true)である限り、ループ内のコードブロックを繰り返し実行する構文です。
while文を利用することで、特定の条件が満たされるまで繰り返し処理を行うことができ、さまざまな用途に活用されます。#例えば、ユーザーからの入力を待ち続けたり、特定の条件に達するまで処理を継続したりする場面で便利です。
初心者でも比較的簡単に理解できるため、Javaプログラミングの基本を学ぶ上で欠かせない要素となっています。
このページではwhile文の基本知識を1分で端的に解説します。是非最後までご覧ください。
関連 Javaの1stステップ:基本的な構文ルールを復習する
while文の基本
while文は、条件が真(true)である限り繰り返し処理を行う制御構造です。基本的な構文は以下の通り。
while (条件) { // 繰り返し実行する処理 }
この構文の中で、「条件」はブール式(boolean型)。つまり、true または false を返す式を指定します。条件が true である限り、ブロック内の処理が繰り返し実行されます。条件が false になると、ループは終了し次の処理に進む仕組み。
早速、簡単なサンプルコードを見てみましょう。
サンプルコード1 whileループの基本的な使い方
int count = 0; while (count < 5) { System.out.println("Count is: " + count); count++; } // 出力結果 // Count is: 0 // Count is: 1 // Count is: 2 // Count is: 3 // Count is: 4
↑のコードは変数 count が 5 未満の間、ループが繰り返し実行されます。ループ内では count の値が出力され、その後 count が 1 ずつ増加。0~4の間は出力を続けますが5になったタイミングでcount < 5の結果がfalseとなるため処理が止まります。
重要なのは、その処理の流れ。つまり。count < 5の結果がfalseとなったタイミングでwhile文は処理を行わない→5は出力されないという点に注目しておきましょう。
ポイント whileループの動作の流れ
- 条件を評価。
- 条件が true の場合、ブロック内の処理を実行。
- 処理が終わると、再び条件を評価。
- 条件が false になるまで、手順2と3を繰り返す。
- 条件が false になると、ループを終了します。
whileループの実践的な使い方
whileループは、基本的な繰り返し処理だけでなく、さまざまな実践的な用途に利用することができます。以下に、具体的なサンプルコードを3つ紹介し、それぞれの利点と注意点を解説します。
サンプルコード1:無限ループ
無限ループは条件が常に真である場合に終了せずに繰り返し実行されるループです。特定のイベントを待機する際や、サーバーのような常駐プロセスで利用されます。
が、基本的には無限ループは起こさないようにするのが一般的。仮に意図しない無限ループを発生させてしまうと、永遠にプログラムが終了せず最悪の場合システム全体に影響を及ぼす障害につながるため注意が必要。
while (true) { System.out.println("This will print forever unless stopped."); // 無限に実行される処理 }
無限ループを設計する際は、必ず停止条件を設けるようにする必要があります。例えば、ユーザーからの入力情報に応じてループを止めたり、外部シグナルでループを終了させるなど。
サンプルコード2:ユーザー入力の処理
whileループを用いて、ユーザーからの入力を処理する例。↓の例では、ユーザーが "exit" と入力するまで、入力された文字列を繰り返し表示します。
import java.util.Scanner; public class UserInputExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input; System.out.println("Type 'exit' to quit."); while (!(input = scanner.nextLine()).equals("exit")) { System.out.println("You entered: " + input); } System.out.println("Program terminated."); scanner.close(); } }
サンプルコード3:配列の要素の処理
whileループを使って配列の各要素を処理する例。この例では、整数の配列の各要素を順に表示します。
public class ArrayProcessingExample { public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 5}; int i = 0; while (i < numbers.length) { System.out.println("Number: " + numbers[i]); i++; } } }
このようにwhile文は配列やリストの各要素を順に処理するのにも便利です。配列の長さが変動する場合でも、条件を設定することで柔軟に対応できます。ただし、このときインデックスの範囲外にアクセスしないように注意が必要です。この例では i < numbers.length
という条件を用いることで、配列の範囲外にアクセスすることを防いでいます。
whileループは、さまざまな場面で柔軟に利用できる強力な制御構造です。無限ループを用いた常駐プロセスの作成、ユーザー入力の逐次処理、配列の要素の処理など、幅広い用途に対応できます。しかし、その利便性ゆえに、無限ループに陥らないように終了条件を適切に設定することが重要です。
do-whileループ
whileループに加えて、Javaには do-whileループという別の繰り返し制御構造があります。do-whileループは、少なくとも一度はループ内の処理を実行したい場合に使います。
do { // 繰り返し実行する処理 } while (条件);
この構文の特徴は、ループのブロックが先に実行され、その後に条件が評価される点です。これにより、条件が初めから false であっても、少なくとも一度は処理が実行されます。
具体的な例を見てみましょう。
int count = 6; do { System.out.println("Count is: " + count); count++; } while (count < 5);
このコードでは、count の初期値が 6 であり、条件 count < 5
は最初から false です。しかし、do-whileループの特性によりループ内の処理は少なくとも一度は実行されます。ループの実行結果は以下の通りです。
Count is: 6
このように、条件に関わらずループ内の処理を必ず一度は実行したい場合に有効です。例えば、ユーザー入力を一度は必ず求める場合や、初期化処理を必ず行う場合などに適していると考えられます。一方で条件が初回実行後に評価されるため、条件に応じた制御を適切に行わないと予期せぬ結果になることがあります。特に無限ループに陥らないよう、条件を適切に設定することが重要です。
import java.util.Scanner; public class DoWhileExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input; // ユーザーが "exit" と入力するまで「少なくとも一度は」メッセージを表示し // ユーザーからの入力を受け付ける。 do { System.out.println("Please enter a command (type 'exit' to quit):"); input = scanner.nextLine(); System.out.println("You entered: " + input); } while (!input.equals("exit")); System.out.println("Program terminated."); scanner.close(); } }
比較: whileループ vs do-whileループ
whileループと do-whileループは似ていますが、ご説明した通りそれぞれ異なる特性があります。ここでは、その際を分かりやすく整理しておきます。
特性 | whileループ | do-whileループ |
---|---|---|
条件評価のタイミング | ループの前に条件を評価 | ループの後に条件を評価 |
最低実行回数 | 条件が true の場合に実行(0回の場合もある) | 条件に関わらず、少なくとも1回は実行 |
使用例 | 繰り返し処理の実行前に条件をチェックする場合 | 条件に関わらず、処理を1回実行した後に条件をチェックする場合 |
サンプルコード while vs do-while
import java.util.Scanner; public class WhileVsDoWhile { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Using while loop:"); System.out.print("Enter a command (type 'exit' to quit): "); // ユーザーからの入力を受け取る String input = scanner.nextLine(); // whileループの例 // ループを開始する前に、条件をチェック。→入力が "exit" でない場合、メッセージを表示し続ける。 while (!input.equals("exit")) { System.out.println("You entered: " + input); System.out.print("Enter a command (type 'exit' to quit): "); input = scanner.nextLine(); } System.out.println("\nUsing do-while loop:"); String doWhileInput; // do-whileループの例 // メッセージを表示し、条件を後でチェック // →最初の入力が "exit" であっても、少なくとも一度はメッセージが表示される do { System.out.print("Enter a command (type 'exit' to quit): "); doWhileInput = scanner.nextLine(); if (!doWhileInput.equals("exit")) { System.out.println("You entered: " + doWhileInput); } } while (!doWhileInput.equals("exit")); scanner.close(); System.out.println("Program terminated."); } }
whileループは条件を満たすかどうかを最初に確認し、do-whileループは少なくとも一度は処理を実行することを保証します。この違いを理解することで、適切なループ構造を選択できるようになるでしょう。