では、ここからは「do...while 文の練習問題(レベル別)+模範解答&ステップ解説」を紹介します。
すべて Java で実行できるサンプルです。
【レベル1】基本構文を理解しよう
問題1:1から5までの数字を順に表示する
do...while 文を使って、1〜5を順番に出力してください。
✅ 解答例
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 5);
Java🪜 ステップ解説
numを 1 で初期化。doの中を実行(まず1が表示される)。num++で 2 にする。- 条件
num <= 5→trueなら繰り返す。 - 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🪜 ステップ解説
- 変数
sumに合計をためる(最初は 0)。 doの中で入力を受け取る。- 負でなければ合計に加える。
- 条件
num >= 0がtrue→ 繰り返す。 - 負数を入力 → 条件が
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🪜 ステップ解説
attemptで試行回数を数える。doブロックで毎回入力を求める。- 合っていれば
success = trueにしてbreak。 - 間違っていれば回数をカウント。
- 3回目のあとに
attempt < 3がfalseになり終了。 - 最後に成功/失敗を分岐して出力。
🧠 ポイント:
- 「少なくとも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🪜 ステップ解説
- 試行回数をカウント。
do内で接続処理を実行(今回はランダム判定)。- 成功なら
success = trueで終了。 - 失敗でも回数制限未満ならもう一度。
- 成功 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🪜 ステップ解説
doの中で毎回ユーザー入力を受け取る。- 入力が
"exit"以外なら返答を表示。 - 条件
!input.equalsIgnoreCase("exit")→"exit"が入力されたら終了。
🧠 ポイント:
無限ループではなく、do...while によって「一度は入力を受ける」ことを保証。
まとめ(実務での使い分け)
| 目的 | 向いている文 |
|---|---|
| 確実に1回は実行 | ✅ do...while |
| 条件が真の間だけ実行(0回もあり) | while |
| 繰り返し回数が決まっている | for |
