Java | while / for / do…while 比較表 と 図解

Java Java
スポンサーリンク

初心者向けに、違いが一目で分かる比較表と図解を用意しました。


1. 一目でわかる比較表

観点forwhiledo…while
構文for(init; cond; step){ ... }while(cond){ ... }do { ... } while(cond);
最低実行回数0回(条件次第)0回(条件次第)1回は必ず実行
典型用途回数が分かっているループ/配列の走査条件が成り立つ間続ける(事前判定)最低1回は実行したい処理(入力・メニュー)
初期化・更新の定位置同じ行にまとめられる(可読性◎)本体や外で行う本体の中で更新することが多い
無限ループになりやすい点更新忘れで発生更新忘れで発生更新忘れで発生(初回実行のため気づきにくい)
可読性回数ループに最適条件ベースに直感的意図(最低1回実行)を示すのに向く

2. 図解(動作フロー)

for(初期化 → 条件 → 本体 → 更新 → 条件 …)

 start
   |
   v
 init ---> cond? -no-> end
            | yes
            v
         [ body ]
            |
            v
          step
            |
            v
          cond? -> ...

説明:init(初期化)を最初に一度だけ行い、cond が真の間 body を実行して step(更新)を行う。


while(条件 → 本体 → 条件 …)

 start
   |
   v
 cond? -no-> end
   | yes
   v
 [ body ]
   |
   v
 cond? -> ...

説明:最初に cond を評価するため、条件が偽だと0回実行される。


do…while(本体 → 条件 → 本体 …)

 start
   |
   v
 [ body ]   <--(必ず1回実行)
   |
   v
 cond? -yes-> [ body ]
   |
   no
   v
  end

説明:body を先に実行し、その後で cond を評価する。だから必ず1回は実行される。


3. 使用判断フローチャート(短い)

処理の目的は?
  ├─ 回数があらかじめ分かっている? ─ yes -> for
  └─ no ->
        ├─ 最低1回は必ず実行したい? ─ yes -> do...while
        └─ no -> while

4. 実例比較(同じ仕様を3種類で実装)

仕様:ユーザーが q を入力するまで、入力を表示する(最初に必ず一度表示)

  • for(非推奨・無限ループ形式で代替)
for(;;) {
    String s = sc.nextLine();
    if (s.equals("q")) break;
    System.out.println(s);
}
Java
  • while(最初に1回読み取りが必要)
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

5. よくあるミスと対処

  • セミコロン忘れ(do { ... } while(cond) の末尾)→ コンパイルエラー。
  • ループ変数の更新忘れ → 無限ループ。小さい値で紙にトレースして確認。
  • 入力で nextInt() 使うと例外が出る可能性 → hasNextInt() か try/catch で対処。

6. まとめ(1行)

  • for は「回数が分かっているとき」、while は「条件を先に確かめたいとき(0回あり得る)」、do...while は「最低1回は実行したいとき」に使う。
タイトルとURLをコピーしました