while文
while文による繰り返し
では次に、while文(while statement)について学習していきましょう。 while文は、次のようなシンプルな構文となります。
英語のwhileには、「〜の間」という意味があります。
構文 : while文
while(条件) 文
構文 : 複数の文を実行するwhile文
while(条件){ 文1 文2 ... }

「条件」の値がtrueの間だけループ本体が実行され、falseになったときにループは終了します。 for文と違って、「初期化部」と「更新部」はありません。 while文の構文中では、記述できるのは「条件」だけとなっています。 従って、「初期化部」と「更新部」に相当する部分は、必要に応じてしかるべき場所に記述することになります。
for文とwhile文は相互に置き換えることができます。 ForSample01と同じ機能のプログラムをwhile文を使って書くと次のようになります。
WhileSample01.java
class WhileSample01 { public static void main(String[] args) { int i = 1; while(i <= 3){ System.out.println(i + "回目です。"); i++; } System.out.println("ループを抜けた後、iは" + i + "になっています。"); } }
実行結果はForSample01と同じです。
WhileSample01の実行結果
1回目です。 2回目です。 3回目です。 ループを抜けた後、iは4になっています。
WhileSample01では、まずwhile文に入る前に
int i = 1;
が実行されます。 これがfor文で言う「初期化部」に相当します。 次にwhile文に入り、「条件」である「 i <= 3」が評価されます。 最初はiの値が1になっていますので、trueとなり、
System.out.println(i + "回目です。");
が実行され、「1回目です。」と表示されます。 そして、次の回の繰り返しに入る前に
i++;
が実行されます。 これがfor文で言う「更新部」に相当します。 このとき、iの値は2になります。 ここでまた i <= 3 が評価され、...というように繰り返されていきます。 「3回目です。」と表示された後で
i++;
が実行されると、iの値は4になります。 そして、次に i <= 3 を評価するとfalseとなり、4回目はループ本体は実行されず、ループは終了することになります。 WhileSample01でのwhile文の流れを表 7-3にまとめておきます。 やはり、これも表 7-1と全く同じ内容です。
繰り返し回数 | iの値 | i <= 3 | 表示内容 | i++後のiの値 |
---|---|---|---|---|
1 | 1 | true | 1回目です。 | 2 |
2 | 2 | true | 2回目です。 | 3 |
3 | 3 | true | 3回目です。 | 4 |
4 | 4 | false |
条件に関する記述を誤るとどうなるか
次のコードを見てください。
int i = 1; while(i <= 3){ System.out.println(i + "回目です。"); }
これはWhileSample01に似ていますが、 i++; という文が書かれていません。 このため、変数iの値はずっと1のままで、ループを何度繰り返しても i <= 3 はfalseにはなりません。 したがって、このプログラムは永久にループを終了することができなくなってしまうのです。 このようなループは無限ループと呼ばれます。
次のコードはどうでしょう。
int i = 1; while(i >= 3){ System.out.println(i + "回目です。"); i++; }
WhileSample01とどこが違っているか分かりますか。 よく見ると、 i >= 3 の部分が違っているのです。 不等号の向きが逆ですね。 これでは1回目から「条件」がfalseになってしまうので、ループ本体が一度も実行されず、いきなりループが終了してしまいます。
繰り返しの条件に関する記述をうっかり忘れたり、間違えたりしないように注意しましょう。
while文では、条件に関する記述をうっかり忘れないように注意する。