do-while文
7.4 do-while文
前節で説明したwhile文と非常によく似た構文に、do-while文があります。
本項ではdo-while文の構文と使い方について学習していきます。
7.4.1 do-while文の基本構文
while文では、繰り返し処理の最初の条件が成立しなかった場合、一度もブロック内の処理が行なわれません。
一方do-while文では、まず内部処理を実行してから条件式を評価し、条件が成立する場合はループを繰り返します。そのため、必ず一度はブロック内の処理が実行されます。do-while文はwhile文とは異なり、条件式の評価タイミングが後になるのです。
上のdo-while文の基本構文を見てわかるように、繰り返し処理を行った後に条件式の判定を行います。また、記述の注意点として、構文で条件式の後に「;(セミコロン)」が付くので忘れないようにしてください。
do-while文をフローチャートで表すと、図 7.4.1のようになります。
図 7.4.1 : do-while文のフローチャート
7.4.2 do-while文を用いて同じメッセージを繰り返すプログラム
では、do-while文を使って、コンソールウィンドウに同じメッセージを複数回出すプログラムを作成し、結果を確認しましょう。
① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch7
③ 名前 :DoWhileLoop1
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ DoWhileLoop1.java
package jp.co.f1.intro.ch7; public class DoWhileLoop1 { public static void main(String[] args) { // do-while文を制御するための変数 int i = 1; do { System.out.println("HelloDoWhileLoop!"); i++; } while (i <= 5); } }
実行結果
解説
このプログラムは、do-while文を使って「HelloDoWhileLoop!」というメッセージをコンソールウィンドウに5回表示させるものです。
8行目の記述はカウンタ変数の宣言と初期化です。while文と同じようにカウンタ変数を作成しておきます。
10~14行目がdo-while文です。for文やwhile文と違い、条件式を判定するタイミングが内部処理の後なので、for文やwhile文とはループを抜けるタイミングが違います。
次の表は、このプログラムのdo-while文の流れを表したものです。まず初めに内部処理である「HelloDoWhileLoop!」というメッセージの表示を行った後にインクリメントが行われ、ループの最後に条件式が判定されます。
このプログラムをフローチャートで表すと、図 7.4.2のようになります。
図 7.4.2 : DoWhileLoop1のフローチャート
7.4.3 条件式が最初から成立しない繰り返し文を用いたプログラム
条件式が成立しない場合に、while文とdo-while文での処理がどのように違うかを、プログラムを作成して確認しましょう。
① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch7
③ 名前 :DoWhileLoop2
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ DoWhileLoop2.java
package jp.co.f1.intro.ch7; public class DoWhileLoop2 { public static void main(String[] args) { // whileとdo-whileを制御するための変数 int j = 6; System.out.println("-- 最初から条件に合わない場合(while文) --"); while (j <= 5) { System.out.println("HelloDoWhileLoop!"); j++; } System.out.println(); System.out.println("-- 最初から条件に合わない場合(do-while文) --"); do { System.out.println("HelloDoWhileLoop!"); j++; } while (j <= 5); } }
実行結果
解説
このプログラムには、while文とdo-while文が記述されていますが、どちらも1回目の条件式が成立しないようになっています。while文とdo-while文の処理の違いを確認していきましょう。
まず8行目では、while文とdo-while文で使うカウンタ変数を宣言し、初期化しています。
次にwhile文の動きですが、これは、最初から条件が満たされない記述になっています。8行目であらかじめ作成したカウンタ変数を使うと、13行目の条件式は「6 <= 5」となるので成立しません。そのため14、15行目の内部処理は実行されず、そのままwhile文から抜けます。
12~15行目のwhile文の処理の動きは以下の表のようになります。
続いて、20~23行目のdo-while文の処理の流れを解説します。先ほどのwhile文と同じように最初から条件が満たされませんが、条件式の判定の前に22、23行目の内部処理が行われます。そのため、条件式の結果に関係なく1回目のループでは内部処理である22行目の「HelloDoWhileLoop!」と23行目の変数jのインクリメントが実行されます。
内部処理が終了すると、24行目で条件式の判定が行われます。変数jの値は7なので、条件式は成立せず、do-while文を抜けます。
次の表は20~23行目のdo-while文の処理の流れを示しています。ソースコードを見比べながら、どのような順序で実行されるのかを確認して下さい。
do – while文の使用頻度do – while文とwhile文の違いは、処理の後で条件の判定を行うか前に判定を行うかです。現実的には、ほとんどの場合でwhile文だけで表現できることが多いので、do – while文を使う機会はあまりないかもしれません。
今回作成したプログラムをフローチャートで表すと、図 7.4.3のようになります。
図 7.4.3 : DoWhileLoop2のフローチャート
ポイント・ do-while文は条件式に関係なく、必ず一度はブロック文内の処理が実行される。
・ do-while文は、条件式の判定の順番がfor文やwhile文とは異なるので、同じ式を設定していてもfor文やwhile文とは繰り返し回数が異なる場合がある。