Java | while文

Java Java
スポンサーリンク

では 初心者向けにやさしく、丁寧に、例題たっぷり に説明します。各例はそのままコピペして動かせる 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

動かし方の例:

  • ユーザー入力: 530
  • 出力は途中の合計と最終合計

ポイント:

  • ループ内で必ず次の入力(状態変化)を読み込むこと。
  • Scanner を使うので importclose() も忘れずに。

無限ループと抜け方(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 の奇数のみ。


よくあるミス(初心者がハマるポイント)

  1. 更新処理を忘れる(例:i++) → 無限ループになる。
  2. 条件を間違える<=< の混同) → 意図しない回数になる。
  3. Scanner の読み込み位置をミスnextInt() のあと nextLine()) → 改行が残って意図しない挙動。
  4. 無限ループで CPU を食う(無駄に速く回し続ける) → Thread.sleep() で一時停止させる手もあるが、基本は設計で回避。
  5. 例外が発生してループが止まる(入力が不正) → 入力のバリデーションや 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 が向く。
  • breakcontinue を用途に応じて使い分ける。
  • 入力やエラー処理(例:入力が数でないとき)も考えると実務向けに強くなる。
タイトルとURLをコピーしました