while文

while文による繰り返し

では次に、while文(while statement)について学習していきましょう。 while文は、次のようなシンプルな構文となります。

英語のwhileには、「〜の間」という意味があります。

構文 : while文
while(条件)
    文
構文 : 複数の文を実行するwhile文
while(条件){
    文1
    文2
    ...
}
図 7-2 : 複数の文を実行するwhile文のフローチャート

「条件」の値が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と全く同じ内容です。

表 7-3 : WhileSample01でのwhile文の流れ
繰り返し回数 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文では、条件に関する記述をうっかり忘れないように注意する。