Java | 実務で使う do…while の応用3選

Java Java
スポンサーリンク

ここでは、実務でよく登場する do...while の3大パターンを、
・動作のイメージ
・実際のコード
・ポイント解説
をセットでわかりやすく紹介します。


① メニュー処理(ユーザー操作を繰り返す)

よくある場面

  • コンソールアプリや管理ツールで「メニューを繰り返し表示」し、
    ユーザーが「終了」を選ぶまで続ける。

コード例

import java.util.Scanner;

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

        do {
            System.out.println("========== メニュー ==========");
            System.out.println("1. データ表示");
            System.out.println("2. データ保存");
            System.out.println("0. 終了");
            System.out.println("============================");
            System.out.print("番号を選んでください: ");

            choice = sc.nextInt();

            switch (choice) {
                case 1:
                    System.out.println("データを表示しました。\n");
                    break;
                case 2:
                    System.out.println("データを保存しました。\n");
                    break;
                case 0:
                    System.out.println("終了します。");
                    break;
                default:
                    System.out.println("無効な番号です。もう一度入力してください。\n");
            }
        } while (choice != 0);

        sc.close();
    }
}
Java

解説

  • メニューは 必ず1回表示 したいので、do の中に入れる。
  • choice != 0 の間はループを継続。
  • 0 を選ぶと false → 終了。
  • switch で分岐処理を整理(可読性が高く実務でも好まれる)。

実務ポイント

  • 本番アプリではこの構造をベースに、
    「各メニュー項目を別クラスのメソッドとして呼び出す」
    など、責務を分離して拡張します。
  • UIアプリでも「ユーザー操作を待つループ」は似た発想(イベントループなど)。

② リトライ処理(通信・ファイルアクセスなど)

よくある場面

  • 通信が失敗したときに「最大3回まで再試行する」。
  • データベース接続やAPI呼び出しで、1回で失敗しても諦めない制御。

コード例

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

        do {
            attempts++;
            System.out.println("[" + attempts + "回目] 接続中...");

            // 疑似的な通信結果(30%の確率で成功)
            success = Math.random() < 0.3;

            if (success) {
                System.out.println("接続成功 ✅\n");
            } else {
                System.out.println("接続失敗 ❌\n");
            }
        } while (!success && attempts < 3);

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

解説

  • 条件:!success && attempts < 3
    → 成功していない間 or 試行回数が上限未満なら再実行。
  • 実務では、実際の通信処理を try { ... } catch (Exception e) {} の中に書く。
  • 成功した時点でループを抜ける。

実務ポイント

  • do...while にすることで、
    まず1回は試す(最初の試行) → 条件次第で再試行」
    の流れを自然に書ける。
  • よく見かける場面:
    • API呼び出し再試行
    • ファイルロック解除までの待機
    • DBリトライロジック

応用例(本番コード風)

do {
    try {
        processDataFromServer();
        success = true;
    } catch (IOException e) {
        System.err.println("通信失敗。再試行します...");
        Thread.sleep(1000); // 1秒待って再試行
    }
    attempts++;
} while (!success && attempts < MAX_RETRY);
Java

③ ユーザー入力ループ(バリデーション)

よくある場面

  • 入力値が正しいかチェックして、
    不正なら再入力を促す。
  • ユーザー体験を損ねないよう、最初の入力を必ず受け取ることが大事。

コード例

import java.util.Scanner;

public class InputValidationExample {
    public static void main(String[] args) {
        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("無効な値です。もう一度入力してください。\n");
            }
        } while (age < 1 || age > 120);

        System.out.println("入力された年齢:" + age + "歳");
        sc.close();
    }
}
Java

解説

  • do ブロックで必ず1回入力を受ける。
  • 範囲外ならメッセージを表示して再度入力。
  • 条件が満たされる(正しい入力)まで繰り返す。

実務ポイント

  • 入力バリデーションは フォーム入力・設定値のチェック・CLIツール でよく出る。
  • GUIアプリやWebアプリでも「最低1回の入力」+「不正なら再表示」は同じ構造。
  • 実務では、入力値を検証するメソッドを切り出してテストしやすくします。

まとめ(使い分け早見表)

用途条件式でのタイミング特徴
🔁 for回数が明確なループ1〜10のカウント繰り返し回数が決まっている
🔁 while条件が満たされる間だけファイルが存在する間処理実行前にチェック
🔁 do...while最低1回実行してから判定入力・メニュー・リトライ一度は実行したい処理

さらに実務的に強くなるヒント

  • 「リトライ間隔」や「最大回数」 は設定ファイル(config.propertiesなど)から読み込むと柔軟。
  • 例外処理(try-catch-finally)と組み合わせて「安全なループ脱出」を設計する。
  • 単体テスト時には do...while ループの条件をモックして、ループの回数を制御可能にする。
タイトルとURLをコピーしました