繰り返しを実現するfor文の構造を前に見ました。今回は他の繰り返し構文であるwhile文とdo-while文の二つの構文を見てみましょう。whileは「〜の間」という接続詞ですが「特に長さの決まっていない時間」という意味の名詞、「時間をつぶす」という動詞でもあります。
while文の構造
while文はfor文より構造は単純です。
while (継続条件) { 繰り返す処理 }
「継続条件を満たす間は繰り返す処理を行う」という意味になります。これはif文の「条件を満たす時一度だけ処理を行う」構造の繰り返し版と言えます。
for文と比べてみましょう。
for ( 初期状態の指定 ; 継続条件 ; 毎回末尾で行う処理 ){ 繰り返す処理 }
for文のほうが初期状態や毎回末尾で行う処理を指定できる場所が確保されています。while文では独自に確保します。
while文の使い方
以前for文で作った10回文字列を出力するコードです。
//sample1 for(int i = 0; i < 10; i++){ System.out.println("Copy:" + i); }
これと同じ処理をwhile文で書きます。
//sample2 int i = 0; while(i < 10){ System.out.println("Copy:" + i); i++; }
初期状態の指定は必要であればwhile文の前に書きます。また毎回末尾で行う処理は繰り返し処理の一番最後に書きます。
breakで中断させる
継続条件の指定の他に繰り返しの途中で任意に中断させるにはbreak文を使います。breakには「壊す」の他に「中断する」の意味もあります。breakfast「朝食」のfastは「絶食」の意味なのでbreakfastの本来の意味は「絶食を中断する」という意味です。
ではbreakを使って上の例を書き換えます。
//sample3 int i = 0; while(true){ if(i >= 10){ break; } System.out.println("Copy:" + i); i++; }
whileの継続条件はtrue固定にしています。この場合無限ループとなり処理は永遠に繰り返されてしまいます。今回breakする条件として継続条件「10未満」の否定条件「10以上」を指定しました。実行結果は同じです。
do-while文の使い方
while文が継続条件を満たさない場合は一度も実行しないのに対してdo-while文は一度は必ず実行するような構造になっています。
do { 繰り返す処理 } while (継続条件);
まず処理を行い一度目が終わった時点で継続するか判断します。
//sample4 int i = 20; do{ System.out.println("Copy:" + i); i++; }while(i < 10);
仮に変数iの初期値を10以上にしても継続条件は最後にされるので一度だけは実行されます。上記のサンプルは以下のように一度だけ出力されます。
Copy:20
これをwhile文を使って書くと以下のようになります。
//sample5 int i = 20; while(true){ System.out.println("Copy:" + i); i++; if(i >= 10){ break; } }
sample3と比べるとif文の挿入位置が違うことがわかります。sample3は出力の前でifの判定を行いsample5では後で行っています。