Java | while / for と do…while の使い分け表

Java Java
スポンサーリンク

以下は違いをパッと比較できる「使い分け表」と、実践的な判断ルール・例です。初心者が迷いやすいポイントを中心にまとめました。


概要

  • for:回数が分かっている時や初期化・更新が決まっている反復に最適。
  • while:条件を先にチェックして条件が成り立つ間だけ繰り返す(0回もあり得る)。
  • do...while最低1回は必ず実行したいときに使う(処理→条件チェックの順)。

比較表

観点forwhiledo…while
構文の特徴for(init; cond; step){} — 初期化・条件・更新を1行で書けるwhile(cond){} — 条件を先に評価do { } while(cond); — 本体を先に1回実行してから条件評価
最低実行回数0回(条件次第)0回(条件次第)1回(必ず1回実行)
典型的な用途固定回数ループ、配列やリストのインデックス処理条件が変わるまで繰り返す(事前判定)ユーザー入力/メニューの最初の一回表示など(事後判定)
可読性初期化/更新が明確 → 読みやすいシンプルで直感的「最低1回実行」が明確に伝わる場合に有効
無限ループになりやすいか更新忘れでなり得る更新忘れでなり得る更新忘れでもなり得る(初回必ず実行されるため気づきにくい)
使わない方がよいケース条件ベースで初回実行不要なとき初回実行を必須にしたいとき初回実行が不要なとき(0回が許容される)
例(疑似コード)for(i=0;i<10;i++)while(scan.hasNext())do { input = next(); } while(!valid(input));

いつどれを選ぶか:実践ルール(チェックリスト)

  1. 「最低1回は処理を実行する必要があるか?」
    • はい → do...while を検討。
    • いいえ(0回でもよい) → while または for
  2. 「反復回数が事前にわかるか?」
    • はい → for(初期化・更新をまとめて書ける)。
    • いいえ → while(または do...while)を使う。
  3. 「ループ本体で条件を変える(入力を受ける等)必要があるか?」
    • 入力を最低1回受けてから判定する → do...while が自然。
    • 判定を最初にしてから処理を始める → while
  4. 「可読性を優先するか?」
    • 初期化と更新が密接なら for。条件が重要なら while。動作の仕様(最低1回)が重要なら do...while

小さなコード例(比較)

同じ動作(ユーザーが q を入力するまで繰り返す)を3つで書いてみる:

for(あまり自然ではない):

// for で無理やり:回数を大きめにとって break で抜ける例(非推奨)
for (;;) {
    String s = sc.nextLine();
    if (s.equals("q")) break;
    System.out.println(s);
}
Java

while(事前チェックがある場合):

String s = sc.nextLine();
while (!s.equals("q")) {
    System.out.println(s);
    s = sc.nextLine();
}
Java

do...while(最も自然):

String s;
do {
    s = sc.nextLine();
    System.out.println(s);
} while (!s.equals("q"));
Java

do...while は「まず読み取って表示 → ‘q’ なら終了」という仕様にぴったり。


よくある誤りと対処

  • セミコロン忘れ(do { ... } while (cond) の末尾):コンパイルエラーになる → 慌てず付ける。
  • ループ変数を更新し忘れる:無限ループの原因 → 小さな値で手動トレースして確認。
  • do...while で「0回でもいい」ケースに使ってしまい、意図しない1回実行が入る → 仕様を再確認してから使う。
  • 入力処理で Scanner.nextInt() 等を使うと入力不正で例外 → hasNextInt() で事前チェック、または try/catch。

パフォーマンス面

  • for / while / do...while の実行速度差は通常無視して良い(JVM最適化により同等)。可読性・意図の明示が優先。

推奨(初心者向け)

  • 配列やリストをインデックスで回す/回数が確定している → for を使おう。
  • 「条件が成り立つ間だけ繰り返す(0回あり得る)」 → while
  • 「最低1回は必ず実行したい(ユーザー入力の最初の読み取りやメニュー表示)」 → do...while
タイトルとURLをコピーしました