do..while文
for文やwhile文ではまず条件式を評価してから1回目の繰り返しを行います。その為、場合によっては一度も繰り返し処理を行わないことがあります。それに対してまず繰り返しを一度行ってから条件式を評価したい場合に利用されるのがdo..while文です。書式は次の通りです。
do{ 実行する文1; 実行する文2; ... }while (条件式);
do..while文ではまず「{」から「}」のブロック内に記述された文を実行します。そして条件式を評価しtrueだった場合には再度ブロック内の処理を行いますがfalseだった場合にはdo..while文を終了して次の文へ処理が移ります。
注意すべき点は最後にセミコロン(;)を付ける必要がある点です。これはfor文やwhile文と異なるため注意して下さい。
繰り返しで実行される文が一つだった場合には「{」と「}」を省略して次のように記述することもできます。
do 実行する文; while (条件式);
ただ分かりにくくなるので省略はしないほうがいいかもしれません。
while文とdo..while文は必ず1回はブロック内の処理を実行するかどうかだけの違いです。次の例を見てください。
int i = 7; do{ System.out.println("i = " + i); i -= 4; }while(i < 0);
この場合は次のような処理の流れとなります。
1)i = 7; 2)「i = 7」を画面に出力 3)i -= 4; 4)条件式を評価。iは0よりも大きいので繰り返しを実行 5)「i = 3」を画面に出力 6)i -= 4; 7)条件式を評価。iは0より大きくないので繰り返しを終了
今回は対象となる数値をまず表示し、そこから順に4を減算していき0よりも小さくなったら終了するというものです。もしもwhile文で次のように記述してしまうと間違いです。
int i = 7; while(i < 0){ System.out.println("i = " + i); i -= 4; }
これは対象が正の数だけの場合であれば同じ結果となりますが、負の値を対象にした場合は対象となった値が一度も表示されることなく終了してしまいます。よってwhile文で同じ動作をさせるには次のように記述しなければなりません。
int i = 7; System.out.println("i = " + i); while(i < 0){ i -= 4; System.out.println("i = " + i); }
do..while文で記述できることは基本的にwhile文でも記述することができますが、do..while文を使った方が簡潔に記述できる場合があります。そのような時にdo..while文を使って下さい。
サンプル
では簡単な例で試しておきます。
class JSample7_1{ public static void main(String args[]){ int i = 7; do{ System.out.println("i = " + i); i -= 4; }while(i > 0); System.out.println("0を下回ったので終了です"); i = -3; do{ System.out.println("i = " + i); i -= 4; }while(i > 0); System.out.println("0を下回ったので終了です"); } }
コンパイル後に実行すると次のように表示されます。
( Written by Tatsuo Ikura )