do〜while文

do〜while文による繰り返し

もう一つの繰り返しの構文do〜while文(do statement)についても見ておきましょう。

英語のdoには、「〜を実行する」という意味があります。

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

この構文では、 while(条件); と最後にセミコロン(;)が付いていることに注意してください。 while文と違って、「条件」の真偽に関わらず、最低1回はループ本体が実行されます。 2回目以降は「条件」の値がtrueの間だけループ本体が実行され、falseになったときにループは終了します。

WhileSample01をdo〜while文を使って書き換えると次のようになります。

DoSample01.java
class DoSample01 {
    public static void main(String[] args) {
        int i = 1;
        do{
            System.out.println(i + "回目です。");
            i++;
        }while(i <= 3);
        
        System.out.println("ループを抜けた後、iは" + i + "になっています。");
    }
}

実行結果はWhileSample01と同じです。

DoSample01の実行結果
1回目です。
2回目です。
3回目です。
ループを抜けた後、iは4になっています。

DoSample01では、do〜while文に入ると、すぐに

            System.out.println(i + "回目です。");

が実行され、「1回目です。」と表示されます。 次に

            i++;

が実行され、iの値は2になります。 この段階で初めて i <= 3 が評価され、その値がtrueなので2回目の繰り返しに入り、...というように処理は進んでいきます。 「3回目です。」と表示された後で

            i++;

が実行されると、iの値は4になります。 そして、次に i <= 3 を評価するとfalseとなり、ループは終了することになります。 DoSample01でのdo〜while文の流れを表 7-4にまとめておきます。

表 7-4 : DoSample01でのdo〜while文の流れ
繰り返し回数 iの値 表示内容 i++後のiの値 i <= 3
1 1 1回目です。 2 true
2 2 2回目です。 3 true
3 3 3回目です。 4 false

ユーザーに何か入力してもらいたい場合、最低1回は入力を促し、不正な値が入力されたならば再度入力を促すという処理が必要です。 まさにdo〜while文の出番です。 ForSample03は1から入力された数までの和を求めるプログラムでしたが、0以下の数を入力した場合はおかしな結果になっていましたね。 do〜while文を使って、正の整数が入力されるまで何度でも再入力を促すように改良してみましょう。

DoSample02.java
import java.io.*;

class DoSample02 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("1からどの数までの和を求めますか。");
        int num;
        do{
            System.out.println("正の整数を入力してください。");
            num = Integer.parseInt(br.readLine());
        }while(num <= 0);
        
        int sum = 0;
        for(int i = 1; i <= num; i++){
            sum += i;
        }
        
        System.out.println("1から" + num + "までの和は" + sum + "です。");
    }
}

do〜while文の「条件」が num <= 0 となっていますので、正の整数が入力されるまで、何度でも再入力を促してきます。

DoSample02の実行結果
1からどの数までの和を求めますか。
正の整数を入力してください。
0
正の整数を入力してください。
-2
正の整数を入力してください。
4
1から4までの和は10です。

do〜while文では、最低1回は繰り返し処理が実行される。