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特有)
- 変数の初期化ミス
- ループの外で初期値を入れる、中で更新するのをセットで考える
ミニ練習問題
- じゃんけんメニュー:
- ユーザーに「グー/チョキ/パー」を入力させ、結果を表示。
- 「もう一度?」の質問で
Yなら続行。 - 入力が不正なら「もう一度」の流れを作る。
- パスワード再入力:
- 初期パスワードを決めておき、ユーザーに入力してもらう。
- 一致するまで繰り返す(最低1回は聞くので
do-while)。 - 3回失敗したら「ロックしました」を表示して終了するように拡張してみる。
- 平均点の計算(可変回数):
- 最低1つは点数を入力。
- 「続けますか?」で
Yなら次の点数を追加。 - 最後に平均を表示。
まとめの指針
- 必ず1回はやる処理があるなら
do-whileを第一候補に。 - 条件は最後に判定される。続けるための条件を明確に書く。
- 状態を更新する処理(入力、カウンタ、乱数など)を毎周入れて無限ループを避ける。
