この記事の要点
• while は条件が true の間、繰り返す
• do-while は最低1回実行してから判定する
• 繰り返し回数が不明なときは while、決まっているときは for
このシリーズについて
「Java入門」は1本1テーマで進む全15回のシリーズです。本記事はその第9回として、while文とdo-while文による繰り返し処理を扱います。
前提条件: Java 21 がインストール済み。if文とfor文の基本を理解していること。
while文とは
while 文は条件が true である限り、ブロック内を繰り返します。
while (条件式) {
// 条件が true の間、繰り返される
}
for文と異なり、繰り返し回数が事前に決まっていない場合に向いています。
| 特徴 | 説明 |
|---|---|
| 実行タイミング | 条件を先に判定してから実行 |
| 最小実行回数 | 0回(初回から条件が false なら1回も実行されない) |
| 用途 | ユーザー入力待ち、ファイル終端まで読み込み、など |
while文の例
// Java 21
public class WhileExample {
public static void main(String[] args) {
int count = 0;
while (count < 5) {
System.out.println("count = " + count);
count++; // 忘れると無限ループになる
}
System.out.println("ループ終了");
}
}
出力:
count = 0
count = 1
count = 2
count = 3
count = 4
ループ終了
注意: count++ を書き忘れると、条件が永遠に true のまま無限ループに陥ります。必ず条件を変化させる処理を含めてください。
do-while文とは
do-while 文はブロックを先に実行してから条件判定します。
do {
// 最低1回は必ず実行される
} while (条件式);
最大の違いは最低1回は実行される点です。
| 特徴 | 説明 |
|---|---|
| 実行タイミング | 実行してから条件を判定 |
| 最小実行回数 | 1回(条件が最初から false でも1回は動く) |
| 用途 | メニュー選択(最低1回は表示したい)、入力検証、など |
do-while文の例
// Java 21
import java.util.Scanner;
public class DoWhileExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input;
do {
System.out.print("1~10の数字を入力してください: ");
input = scanner.nextInt();
} while (input < 1 || input > 10); // 範囲外なら再入力
System.out.println("入力値: " + input);
scanner.close();
}
}
動作:
- 範囲外の値を入力すると、条件が false になるまで繰り返す
- 最低1回はプロンプトが表示される
ポイント: 「ユーザーに最低1回は何か操作させたい」場合は do-while が自然です。while だと初回の条件判定で弾かれる可能性があります。
無限ループ
条件を常に true にすると、無限ループになります。意図的に使う場合もあります。
// Java 21
public class InfiniteLoop {
public static void main(String[] args) {
int i = 0;
while (true) {
System.out.println("i = " + i);
i++;
if (i >= 5) {
break; // ループを抜ける
}
}
System.out.println("終了");
}
}
出力:
i = 0
i = 1
i = 2
i = 3
i = 4
終了
| 制御文 | 役割 |
|---|---|
break | ループを即座に抜ける |
continue | 現在の周回をスキップして次の周回へ |
補足: サーバーやゲームループなど、「永続的に動かしたい処理」では while (true) + 内部の break 条件が定番です。
while vs do-while vs for の使い分け
| 種類 | 繰り返し回数 | 条件判定タイミング | 用途例 |
|---|---|---|---|
| for | 事前に決まっている | 先に判定 | 配列の走査、決まった回数のループ |
| while | 不明 | 先に判定 | ファイル終端まで、外部イベント待ち |
| do-while | 不明だが最低1回は実行 | 後で判定 | メニュー表示、入力検証 |
迷ったら以下の順で選びます。
- 繰り返し回数が決まっている → for
- 最低1回は実行したい → do-while
- それ以外(繰り返し回数不明) → while
実践例: 合計値を計算
// Java 21
import java.util.Scanner;
public class SumUntilZero {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int input;
System.out.println("数字を入力してください(0で終了)");
while (true) {
input = scanner.nextInt();
if (input == 0) {
break;
}
sum += input;
}
System.out.println("合計: " + sum);
scanner.close();
}
}
動作:
- ユーザーが
0を入力するまで数値を加算 0でbreakしてループを抜ける
ポイント: 「終了条件が途中で決まる」パターンでは while (true) + break が読みやすいことがあります。
よくあるミス
1. セミコロンの位置(while)
while (count < 5); // セミコロンがあると何もしないループになる
{
count++;
}
正しくは:
while (count < 5) {
count++;
}
2. do-while のセミコロン忘れ
do {
count++;
} while (count < 5) // セミコロンが必要
正しくは:
do {
count++;
} while (count < 5); // 末尾にセミコロン
3. 無限ループの原因
int i = 0;
while (i < 10) {
System.out.println(i);
// i++ を書き忘れている
}
正しくは:
int i = 0;
while (i < 10) {
System.out.println(i);
i++; // 必ず条件を変化させる
}
注意: 無限ループに陥ったら Ctrl+C(macOS/Linux)または Ctrl+Break(Windows)でプログラムを強制終了できます。
まとめ
| 構文 | 条件判定 | 最小実行回数 | 主な用途 |
|---|---|---|---|
| while | 先 | 0回 | 繰り返し回数不明、ファイル読み込み |
| do-while | 後 | 1回 | メニュー表示、入力検証 |
| for | 先 | 0回 | 繰り返し回数が決まっている |
breakでループを即座に抜けるcontinueで現在の周回をスキップ- 無限ループは
while (true)で作る(脱出条件を忘れずに)
次のステップ
Java入門 #10 - 配列の基本 で複数の値をまとめて扱う配列を学びます。
参考リソース
- Oracle Java Tutorials - The while and do-while Statements
- Java SE 21 Language Specification - Statements