Java | do..while文

Java Java
スポンサーリンク

Do-while文の基本

「一回はやってみてから、続けるか決める」——これがdo-while文です。最初に処理を実行して、その後で条件をチェックします。だから最低1回は必ず動きます。

do {
    // やりたい処理(まず1回実行される)
} while (条件式); // ここで続けるか判定(セミコロンが必要)
Java

初心者にわかりやすい考え方

  • まず試す: とりあえず1回やる(入力を受け付ける、メニューを表示するなど)
  • 続けるか判断: 「またやる?」の答えがYESならもう一度、NOなら終わり
  • 終わり方が自然: 人間の会話や操作に近い流れを作りやすい

例題1: Y/Nで続ける簡単メニュー

「もう一度やる?」の質問は、最低1回は表示したいのでdo-whileが向いています。

import java.util.Scanner;

public class RepeatMenu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String answer;
        do {
            System.out.println("メニュー: 1) 足し算  2) 挨拶  3) 終了(でも質問は出ます)");

            // 適当に何か動かす
            System.out.print("番号を選んでください: ");
            int choice = sc.nextInt();
            sc.nextLine(); // 改行の読み捨て

            if (choice == 1) {
                System.out.print("数値A: ");
                int a = sc.nextInt();
                System.out.print("数値B: ");
                int b = sc.nextInt();
                sc.nextLine();
                System.out.println("結果: " + (a + b));
            } else if (choice == 2) {
                System.out.println("こんにちは!");
            } else {
                System.out.println("仮の終了選択。最後に続行確認をします。");
            }

            // ここで続けるか確認(最低1回は聞く)
            System.out.print("もう一度やりますか? (Y/N): ");
            answer = sc.nextLine().trim().toUpperCase();
        } while (answer.equals("Y"));

        System.out.println("終了します。");
        sc.close();
    }
}
Java
  • ポイント: doの中で処理を実行し、最後に「続ける?」を聞いてYならもう一回。
  • 初心者がつまずきやすい点: nextInt()の後に残る改行をnextLine()で捨てる。

例題2: 入力を必ず1回は検証したい

「1〜10の数値を入力してね」と言って、間違ったらもう一度。このときも最低1回は入力させたいですよね。

import java.util.Scanner;

public class InputValidation {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num;
        do {
            System.out.print("1〜10の整数を入力してください: ");
            while (!sc.hasNextInt()) {
                System.out.print("整数ではありません。もう一度: ");
                sc.next(); // 不正な入力を捨てる
            }
            num = sc.nextInt();
        } while (num < 1 || num > 10);

        System.out.println("OK! あなたの入力は: " + num);
        sc.close();
    }
}
Java
  • ポイント: 条件は「1〜10以外なら続ける」。だから範囲外ならまた入力。
  • 自然な流れ: 入力→判定→必要ならもう一度、が人間の操作とマッチ。

例題3: サイコロが6になるまで振り続ける

ゲームっぽい処理はdo-whileが直感的。

import java.util.Random;

public class DiceUntilSix {
    public static void main(String[] args) {
        Random rand = new Random();
        int roll;
        do {
            roll = rand.nextInt(6) + 1; // 1〜6
            System.out.println("出目: " + roll);
        } while (roll != 6);

        System.out.println("6が出たので終了!");
    }
}
Java
  • ポイント: 必ず1回は振る。6で終わり、それ以外なら続行。

whileやforとどう使い分ける?

  • do-whileが向く場面
    • 最低1回は実行したい(メニュー表示、初回入力、初期処理)
    • 続行可否が最後に決まる(ユーザーの回答次第で続ける)
  • whileが向く場面
    • 始める前に条件チェックしたい(データが空なら何もしないなど)
  • forが向く場面
    • 回数が決まっている繰り返し(10回だけ、配列の全要素など)

よくあるつまずきと回避法

  • 無限ループになった
    • 原因: 条件を変える処理がない/間違っている
    • 回避: ループ内で「条件に関わる値」が必ず変わるようにする
      例: カウンタを増減、入力を更新、乱数を引き直す
  • セミコロン忘れ
    • while (条件);セミコロンを忘れないdo-while特有)
  • 変数の初期化ミス
    • ループの外で初期値を入れる、中で更新するのをセットで考える

ミニ練習問題

  1. じゃんけんメニュー:
    • ユーザーに「グー/チョキ/パー」を入力させ、結果を表示。
    • 「もう一度?」の質問でYなら続行。
    • 入力が不正なら「もう一度」の流れを作る。
  2. パスワード再入力:
    • 初期パスワードを決めておき、ユーザーに入力してもらう。
    • 一致するまで繰り返す(最低1回は聞くのでdo-while)。
    • 3回失敗したら「ロックしました」を表示して終了するように拡張してみる。
  3. 平均点の計算(可変回数):
    • 最低1つは点数を入力。
    • 「続けますか?」でYなら次の点数を追加。
    • 最後に平均を表示。

まとめの指針

  • 必ず1回はやる処理があるならdo-whileを第一候補に。
  • 条件は最後に判定される。続けるための条件を明確に書く。
  • 状態を更新する処理(入力、カウンタ、乱数など)を毎周入れて無限ループを避ける。
タイトルとURLをコピーしました