Java | do…while文の練習問題

Java Java
スポンサーリンク

では、ここからは「do...while 文の練習問題(レベル別)+模範解答&ステップ解説」を紹介します。
すべて Java で実行できるサンプルです。


【レベル1】基本構文を理解しよう

問題1:1から5までの数字を順に表示する

do...while 文を使って、1〜5を順番に出力してください。


✅ 解答例

int num = 1;

do {
    System.out.println(num);
    num++;
} while (num <= 5);
Java

🪜 ステップ解説

  1. num を 1 で初期化。
  2. do の中を実行(まず 1 が表示される)。
  3. num++ で 2 にする。
  4. 条件 num <= 5true なら繰り返す。
  5. 6 になったら条件が false → 終了。

🧠 ポイント
do...while は条件が最初にチェックされないため、最低1回は実行される!


【レベル2】条件付きの繰り返し

問題2:0以上の整数を入力し、合計を計算(負の数で終了)

ユーザーに整数を何度も入力してもらい、負の数が入力されたら終了して、
それまでの合計値を表示するプログラムを作ってください。


✅ 解答例

import java.util.Scanner;

public class DoWhileSum {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num;
        int sum = 0;

        do {
            System.out.print("整数を入力(負の数で終了):");
            num = sc.nextInt();

            if (num >= 0) {
                sum += num;
            }
        } while (num >= 0);

        System.out.println("合計:" + sum);
        sc.close();
    }
}
Java

🪜 ステップ解説

  1. 変数 sum に合計をためる(最初は 0)。
  2. do の中で入力を受け取る。
  3. 負でなければ合計に加える。
  4. 条件 num >= 0true → 繰り返す。
  5. 負数を入力 → 条件が false → 終了して合計を表示。

🧠 ポイント
入力処理は「最低1回は必要」なので、do...while にぴったり!


【レベル3】再試行つきの入力チェック

問題3:パスワードを3回まで入力可能にする

正しいパスワードが "java123" のとき、
3回以内に正しい入力があれば「ログイン成功」、
3回失敗したら「ログイン失敗」と表示するプログラムを作ってください。


✅ 解答例

import java.util.Scanner;

public class PasswordCheck {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        final String CORRECT_PASS = "java123";
        String input;
        int attempt = 0;
        boolean success = false;

        do {
            System.out.print("パスワードを入力してください:");
            input = sc.nextLine();
            attempt++;

            if (input.equals(CORRECT_PASS)) {
                success = true;
                break;
            } else {
                System.out.println("間違っています。(" + attempt + "回目)");
            }
        } while (attempt < 3);

        if (success) {
            System.out.println("ログイン成功!");
        } else {
            System.out.println("ログイン失敗。回数制限を超えました。");
        }

        sc.close();
    }
}
Java

🪜 ステップ解説

  1. attempt で試行回数を数える。
  2. do ブロックで毎回入力を求める。
  3. 合っていれば success = true にして break
  4. 間違っていれば回数をカウント。
  5. 3回目のあとに attempt < 3false になり終了。
  6. 最後に成功/失敗を分岐して出力。

🧠 ポイント

  • 「少なくとも1回は実行」「繰り返し条件を動的に変えたい」 → do...while が最適。
  • 実務ではこういう「再試行ロジック」でよく使われます。

【レベル4】実務に近い例:再試行付きデータ取得

問題4:APIアクセスの再試行

実際のAPI呼び出しはできませんが、
「通信が成功するまで最大3回再試行」するサンプルを do...while で書いてみましょう。
(疑似的に Math.random() で成功/失敗を決めます)


✅ 解答例

public class RetryExample {
    public static void main(String[] args) {
        int attempts = 0;
        boolean success = false;

        do {
            attempts++;
            System.out.println("接続を試みます... (" + attempts + "回目)");

            // 疑似API結果: 30%の確率で成功
            success = Math.random() < 0.3;

            if (success) {
                System.out.println("接続成功!");
            } else {
                System.out.println("接続失敗...");
                // 次の試行の前に少し待機(本番なら Thread.sleep など)
            }
        } while (!success && attempts < 3);

        if (!success) {
            System.out.println("3回試しても接続できませんでした。");
        }
    }
}
Java

🪜 ステップ解説

  1. 試行回数をカウント。
  2. do 内で接続処理を実行(今回はランダム判定)。
  3. 成功なら success = true で終了。
  4. 失敗でも回数制限未満ならもう一度。
  5. 成功 or 3回超えたらループ終了。

🧠 実務ポイント

  • 通信やファイル操作など「成功するまで最大n回試す」場面でよく登場。
  • 本番では try/catch で例外処理も追加する。

【レベル5】無限ループ+明示的な終了制御

問題5:簡易チャットモード

ユーザーが「exit」と入力するまでメッセージを繰り返し表示。
(それ以外の文字は「あなた:〇〇」と返す)


✅ 解答例

import java.util.Scanner;

public class ChatBot {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input;

        do {
            System.out.print("入力してください('exit'で終了):");
            input = sc.nextLine();

            if (!input.equalsIgnoreCase("exit")) {
                System.out.println("あなた:「" + input + "」");
            }
        } while (!input.equalsIgnoreCase("exit"));

        System.out.println("チャットを終了します。");
        sc.close();
    }
}
Java

🪜 ステップ解説

  1. do の中で毎回ユーザー入力を受け取る。
  2. 入力が "exit" 以外なら返答を表示。
  3. 条件 !input.equalsIgnoreCase("exit")"exit" が入力されたら終了。

🧠 ポイント
無限ループではなく、do...while によって「一度は入力を受ける」ことを保証。


まとめ(実務での使い分け)

目的向いている文
確実に1回は実行do...while
条件が真の間だけ実行(0回もあり)while
繰り返し回数が決まっているfor

タイトルとURLをコピーしました