Java | do..while文

Java Java
スポンサーリンク

do...while 文 を超かんたんに、例題つきで詳しく説明

まず結論:
do...while は「必ず1回は実行されるループ」です。処理を先に1回実行してから条件をチェックするので、条件が最初から false でもブロックは1回だけ実行されます。


1. 基本の書き方と流れ

do {
    // 繰り返したい処理(本体)
} while (条件式);
Java

ポイント:

  • do { ... } の中を先に実行する。
  • 実行後に while (条件式); の条件を評価する(条件が true ならもう一度繰り返す)。
  • while の行の最後に セミコロン ; を忘れない。忘れるとコンパイルエラーです。

処理の流れ(図を言葉で):

  1. ブロック内を実行
  2. 条件チェック
  3. 条件が 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 → 出力 → n2 に → 条件 2 > 0true → もう一回
  • n0 より大きくないと判定されたら終了

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 < 10false → 終了
    最終的に出力される値は 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 >= 0false → ループ終了。

問題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() でチェックするなど。本番コードでは例外処理を入れること。
タイトルとURLをコピーしました