では 初心者向けにやさしく、丁寧に、例題たっぷり に説明します。各例はそのままコピペして動かせる Java コードにしています。実行例・ポイント・よくあるミスも合わせて解説します。
while 文って何?
while 文は「ある条件が true のあいだ、処理を繰り返す」ための構文です。
回数が決まっていない繰り返し(例:ユーザーがやめると言うまで、ファイルの終わりまで、条件が満たされるまで)に使います。
基本形:
while (条件式) {
// 繰り返したい処理
}
Java条件式がtrueの間、ブロック{ ... }を繰り返し実行します。- 最初の評価で
falseなら 1回も実行されない 点に注意。
例題 1 — カウンター(基本)
「1から5未満まで順に表示する」簡単な例。
public class WhileCounter {
public static void main(String[] args) {
int i = 1; // 初期化
while (i < 5) { // 条件
System.out.println(i);
i++; // 変化(重要:これがないと無限ループになる)
}
}
}
Java出力:
1
2
3
4
ポイント:
i++を忘れるとiが変化せず無限ループになります(プログラムが止まらない)。i < 5のため 5 は表示されません(「未満」)。
例題 2 — 倍々(条件が変化する別パターン)
前に示した num *= 2 の例。倍にしていって条件が外れたら終了。
public class WhileMultiply {
public static void main(String[] args) {
int num = 1;
while (num < 5) {
System.out.println("num = " + num);
num *= 2;
}
}
}
Java出力:
num = 1
num = 2
num = 4
ポイント:
- 更新方法はいろいろ(
+,-,*=,/=など)で、ループ条件に合うように更新を選びます。
例題 3 — ユーザー入力を受け取り続ける(実務的)
「ユーザーが 0 を入力するまで数を足し続ける」例。実運用でよく使うパターン。
import java.util.Scanner;
public class SumUntilZero {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
System.out.println("数を入力してください(0で終了):");
int n = sc.nextInt();
while (n != 0) { // 0 が来るまで繰り返す
sum += n;
System.out.println("現在の合計: " + sum);
System.out.println("次の数(0で終了):");
n = sc.nextInt(); // 必ず再読み込みすること
}
System.out.println("最終合計: " + sum);
sc.close();
}
}
Java動かし方の例:
- ユーザー入力:
5→3→0 - 出力は途中の合計と最終合計
ポイント:
- ループ内で必ず次の入力(状態変化)を読み込むこと。
Scannerを使うのでimportとclose()も忘れずに。
無限ループと抜け方(break)
明示的に while(true) の無限ループを使い、内部で条件が満たされたら break で抜けるパターン。
import java.util.Scanner;
public class InfiniteLoopBreak {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("何か入力してください(quitで終了):");
String s = sc.nextLine();
if (s.equals("quit")) {
System.out.println("終了します。");
break; // ループから抜ける
}
System.out.println("入力 = " + s);
}
sc.close();
}
}
Java注意:
- 無限ループは便利だが、必ず抜ける条件を用意しましょう。抜けどころが無いとアプリケーションが応答しなくなります。
continue の使い方
ループの現在の反復だけスキップして次の反復に移るときに使います。
int i = 0;
while (i < 10) {
i++;
if (i % 2 == 0) {
continue; // 偶数なら以下の処理をスキップして次へ
}
System.out.println(i + " は奇数");
}
Java出力は 1,3,5,7,9 の奇数のみ。
よくあるミス(初心者がハマるポイント)
- 更新処理を忘れる(例:
i++) → 無限ループになる。 - 条件を間違える(
<=と<の混同) → 意図しない回数になる。 - Scanner の読み込み位置をミス(
nextInt()のあとnextLine()) → 改行が残って意図しない挙動。 - 無限ループで CPU を食う(無駄に速く回し続ける) →
Thread.sleep()で一時停止させる手もあるが、基本は設計で回避。 - 例外が発生してループが止まる(入力が不正) → 入力のバリデーションや
try-catchを使う。
デバッグのコツ
- ループの最初で変数を
System.out.println()して値の変化を追う。 - 小さな条件でまず動かして出力を確認→条件を広げる。
- 無限ループに気づいたら、IDE の停止ボタンやコンソールで
Ctrl+C(ターミナル)で止める。
練習問題
各問題の下に解答と解説を載せます(まずは自分で挑戦してから解答を見るのが学習効果高め)。
練習 1
1〜n(n はユーザー入力)の合計を while で計算して表示するプログラムを作れ。
解答(サンプル)
import java.util.Scanner;
public class SumToN {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("n を入力: ");
int n = sc.nextInt();
int i = 1;
int sum = 0;
while (i <= n) {
sum += i;
i++;
}
System.out.println("1から" + n + "までの合計 = " + sum);
sc.close();
}
}
Java解説:i を 1 から n まで増やしながら sum に足す。<= を使うのがポイント。
練習 2
ランダムで 1〜10 の番号を生成し、ユーザーに数当てをさせる(ユーザーが当てるまで繰り返す)。
解答(サンプル)
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int target = (int)(Math.random() * 10) + 1;
System.out.println("1〜10までの数を当ててください。");
int guess;
while (true) {
System.out.print("入力: ");
guess = sc.nextInt();
if (guess == target) {
System.out.println("正解!");
break;
} else if (guess < target) {
System.out.println("もっと大きいです");
} else {
System.out.println("もっと小さいです");
}
}
sc.close();
}
}
Java解説:while(true) を使い break で抜ける。ヒントを出してあげることで対話型になる。
練習 3(やや応用)
ユーザーが -1 を入力するまで数を読み、入力された数の平均を表示するプログラムを作れ。-1 は集計に含めない。
解答(サンプル)
import java.util.Scanner;
public class AverageUntilMinusOne {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;
int sum = 0;
System.out.println("数を入力してください(-1で終了):");
int n = sc.nextInt();
while (n != -1) {
sum += n;
count++;
n = sc.nextInt();
}
if (count == 0) {
System.out.println("データがありません。");
} else {
double avg = (double) sum / count;
System.out.println("平均 = " + avg);
}
sc.close();
}
}
Java解説:合計と個数を数えて最後に平均を計算。0除算に注意。
まとめ(何を覚えればいい?)
whileは「条件が満たされる限り繰り返す」ためのもの。- ループ内で必ず状態を変化(更新)させること(さもないと無限ループ)。
- 回数が決まっている繰り返しは
for、条件で止めたいときはwhileが向く。 breakとcontinueを用途に応じて使い分ける。- 入力やエラー処理(例:入力が数でないとき)も考えると実務向けに強くなる。
