do...while 文 を超かんたんに、例題つきで詳しく説明
まず結論:do...while は「必ず1回は実行されるループ」です。処理を先に1回実行してから条件をチェックするので、条件が最初から false でもブロックは1回だけ実行されます。
1. 基本の書き方と流れ
do {
// 繰り返したい処理(本体)
} while (条件式);
Javaポイント:
do { ... }の中を先に実行する。- 実行後に
while (条件式);の条件を評価する(条件がtrueならもう一度繰り返す)。 whileの行の最後に セミコロン;を忘れない。忘れるとコンパイルエラーです。
処理の流れ(図を言葉で):
- ブロック内を実行
- 条件チェック
- 条件が
true→ 1 に戻る。false→ 次の処理へ進む
2. なぜ使う?いつ使う?
- 「処理を最低1回実行したい」場合(例:ユーザーに必ず一度入力させて、その内容で続行・終了を決める)。
- ループ本体で条件に影響する処理(入力や変数更新)を行ってから条件を評価したいとき。
例:メニューを表示してユーザーに選ばせる — 最低1回はメニューを見せたい、という場面に便利。
3. 例題①:簡単なカウントダウン
int n = 3;
do {
System.out.println("残り: " + n);
n--;
} while (n > 0);
Java実行結果(順に出る):
残り: 3
残り: 2
残り: 1
解説:
- 初回:
n = 3→ 出力 →nは2に → 条件2 > 0はtrue→ もう一回 nが0より大きくないと判定されたら終了
4. 例題②:ユーザー入力で正しい値が入るまで繰り返す
(Scanner を使った実用例)
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int age;
do {
System.out.print("年齢を入力してください(1〜120):");
age = sc.nextInt();
if (age < 1 || age > 120) {
System.out.println("無効な値です。もう一度入力してください。");
}
} while (age < 1 || age > 120);
System.out.println("入力された年齢: " + age);
sc.close();
Java解説:
doの中で一度入力を受け取り、範囲外ならメッセージを出してwhileの条件がtrue→ 再入力。- これによりユーザーには 必ず一度は入力 させられる。
注意:実際のアプリでは nextInt() の前後で InputMismatchException を扱う(例外処理)ことを推奨します。
5. 例題③:メニューを表示して終了を選ぶまで繰り返す
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int choice;
do {
System.out.println("1: 表示 2: 保存 0: 終了");
System.out.print("番号を選んでください: ");
choice = sc.nextInt();
switch (choice) {
case 1: System.out.println("表示処理"); break;
case 2: System.out.println("保存処理"); break;
case 0: System.out.println("終了します"); break;
default: System.out.println("不正な番号です");
}
} while (choice != 0);
sc.close();
Java解説:
choice != 0の間はループ継続。0が入力されたら終了。
6. 無限ループに注意(よくある落とし穴)
int i = 1;
do {
System.out.println(i);
// i を増やす処理を忘れると、常に i == 1 のまま → 無限ループ
} while (i < 5);
Java対策:
- ループで使う変数は 必ず初期化・更新する(
i++など)。 - 無限ループをわざと使う場合は
break条件を必ず用意する。
7. 実務でよくある使い方(パターン)
- ユーザーからの入力検証(最低1回実行したい場面)
- 再試行(例:APIリトライの簡単なループ、ただし実務ではexponential backoffや最大試行回数を入れる)
- メニュー表示や対話型ツールのコマンドループ
注意(実務):外部操作や例外が発生する処理は do 内で try/catch をし、リトライ回数の上限を設けること。
8. 練習問題(初心者向け)
問題1(基本)
変数 x = 0 から始めて、do の中で x = x + 3 を実行し、x >= 10 になったら終了するプログラムを書いて、出力される値を書き出してください。
問題2(入力)
ユーザーに整数を入力させ、最初に入力した値を表示したあと、その値が負だったら「負の数です」と表示して終了、正なら再び入力を受け付けるプログラムを考えてください(つまり負を入力するまで繰り返すが、最初の入力は必ず表示される)。
問題3(メニュー)
簡単なメニュー(1: 足し算、2: 引き算、0: 終了)を do...while で作って、0 が選ばれるまで続ける。足し算/引き算では2つの数字を読み込み結果を表示する。
9. 練習問題の解答(ステップごとに)
問題1 の解答例
int x = 0;
do {
x = x + 3;
System.out.println(x);
} while (x < 10);
Java出力の流れ:
- 1回目:
x = 3(出力) →3 < 10→ 続行 - 2回目:
x = 6(出力) →6 < 10→ 続行 - 3回目:
x = 9(出力) →9 < 10→ 続行 - 4回目:
x = 12(出力) →12 < 10はfalse→ 終了
最終的に出力される値は3, 6, 9, 12の順です。
問題2 の解答例(要点)
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int n;
do {
System.out.print("整数を入力: ");
n = sc.nextInt();
System.out.println("あなたが入力した値: " + n);
} while (n >= 0);
sc.close();
Java説明:
do内で必ず一度は入力して表示する(問題の要件を満たす)。- 入力が負(
n < 0)になったらwhileの条件n >= 0がfalse→ ループ終了。
問題3 の解答例(要点)
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int choice;
do {
System.out.println("1: 足し算 2: 引き算 0: 終了");
choice = sc.nextInt();
if (choice == 1) {
System.out.print("a = "); int a = sc.nextInt();
System.out.print("b = "); int b = sc.nextInt();
System.out.println("結果: " + (a + b));
} else if (choice == 2) {
System.out.print("a = "); int a = sc.nextInt();
System.out.print("b = "); int b = sc.nextInt();
System.out.println("結果: " + (a - b));
} else if (choice != 0) {
System.out.println("不正な選択です");
}
} while (choice != 0);
sc.close();
Java説明:choice != 0 の間はメニューが繰り返されます。
10. デバッグ & コード品質のヒント
- セミコロン
;を忘れない(while行の末尾)。 - 変数の更新(増減)が
doの中に確実にあるか確認する。 - 意図した回数だけ回るか、実行例を紙に書いて手でトレースしてみる(小さい数で試す)。
- 入力を扱うなら、
Scannerの例外(文字列をnextInt()で読もうとして失敗する等)に注意。実務ではhasNextInt()でチェックするなど。本番コードでは例外処理を入れること。
