最低1回は処理をするとき(do文)
while文では繰り返し実行する処理の前に条件式の判定をしていました。実際にプログラムを作成するようになると、「最低1回は処理をしてから、もう1度同じ処理をするかしないか条件式の判定をする」と処理を制御したい場合があります。そのためにJavaではdo文が用意されています。
1から10までの整数を合計した値を計算するプログラムを作成するときにdo文を使うようにすると、処理の流れは図2のようになります。while文との違いが分かるように、while文の処理の流れも併記しました。
do文の構文は次のとおりです。最後に ;(セミコロン) が必要であることに注意しましょう。図2を見て分かるようにwhile文の条件式を記述する場所が移動しただけなので、処理を繰り返すという点についてはwhile文と同じように理解すればいいでしょう。
do 文 while (条件式);
do文サンプルプログラム
それでは、1から10までの整数を合計した値を計算するプログラムを作成して動作させてみましょう。while文サンプルプログラムのときと同様にして新規にクラスを作成することにします。
- [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
- 表示されるポップアップメニューで[新規]→[クラス]を指定
- 表示される[新規Javaクラス]ダイアログで、[名前]にSample51と入力
- 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
- [終了]ボタンをクリック
出来上がったSample51クラスにリスト5の水色部分を追加してください。
リスト5のプログラムを実行すると、足し算が実行されていく様子が画面へ出力されて、画面2のようになります。今回のプログラムは、while文を使ったリスト4のプログラムと同じ画面出力になるという点に気付いたでしょうか。このように、同じ結果を出力するプログラムでも中の作り方は全然違うということはよくあります。こういった点がプログラムは難しいと思うところですが、同時に面白いところでもあります。
1
3
6
10
15
21
28
36
45
55
回数が決まっているとき(for文)
実は、1から10までの整数を合計した値を計算するプログラムのように、処理を繰り返すときに繰り返す回数が分かっているものについては、while文を使うよりもfor文というものを使った方がプログラムは分かりやすくなります。
for文の構文は次のとおりです。条件式の前後に式を記述できることに注目しましょう。条件式が真の間、処理を繰り返す点はwhile文、do文と同様です。( ) 内には、例えば ( i=1 ; i<=10 ; i++) といった感じで記述します。つまり初期化部には「繰り返しで必要な前処理式」を、条件式には「繰り返しを継続するか否かの条件式」を、更新部には「繰り返しで必要な後処理式」を記述するということになります。
for (初期化部 ; 条件式; 更新部) 文
1から10までの整数を合計した値を計算するプログラムを作成するときにfor文を使うようにすると、処理の流れはwhile文と同じになります。ただし、for文の方がプログラムのソースコードを読んだときに、「繰り返しに必要な変数、前処理と後処理」が分かりやすくなります。while文とfor文とを比較し、表1へ示しました。「繰り返しに必要な変数、前処理と後処理」がfor文の最初の ( ) に含まれてくるのがポイントになります。
処理を繰り返す回数が分かっているときには、iのように繰り返す回数を数え上げる変数を用意します。while文だとプログラムをきちんと理解しないとこの役割を持つ変数がどれか分かりません。一方、for文だと一目で分かります。取りあえずは、whileとforのどちらを使うか悩んだときは、「処理を繰り返す回数が分かっているプログラムかどうか」という視点で判断するといいでしょう。
コラム while文とfor文
for文を使うと、繰り返しに必要な変数は何か、必要な前処理は何か、後処理では何をしないといけないか、といったことがすぐに分かります。ただし、複雑な前処理や後処理が必要な反復処理ではfor文で記述できなかったり、無理に記述すると分かりにくくなってしまったりする場合があります。単純な前処理、単純な後処理が必要な反復処理においてはfor文を使いますが、そうでない場合はwhile文を使うことになります。ここでは、「単純な前処理、単純な後処理が必要な反復処理」のよくある単純な例として「繰り返す回数が分かっている処理」を紹介しています。まずはこれで判断できるようにして、プログラミングに慣れてきたら、反復処理を書くときに、while文をfor文に直した方が分かりやすくならないか、検討して置き換えることができるようになればよいでしょう。
for文(サンプルプログラム)
それでは、1から10までの整数を合計した値を計算するプログラムを作成して動作させてみましょう。while文サンプルプログラムのときと同様にして新規にクラスを作成することにします。
- [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
- 表示されるポップアップメニューで[新規]→[クラス]を指定
- 表示される[新規Javaクラス]ダイアログで、[名前]にSample52と入力
- 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
- [終了]ボタンをクリック
出来上がったSample52クラスにリスト6の水色部分を追加してください。
for文の ( ) 内の初期化部においてint型の変数iを宣言し、1で初期化している点に注意してください。このようにfor文の中で変数を宣言すると、その変数は宣言されたfor文の中だけでしか使えなくなります。for文では、このように専用の変数を宣言することがよくあるので覚えておきましょう。
リスト6のプログラムを実行すると、足し算が実行されていく様子が画面へ出力されて、画面3のようになります。今回のプログラムも、while文を使ったリスト4のプログラムと同じ画面出力になります。
1
3
6
10
15
21
28
36
45
55
今回は、反復処理(繰り返し同じ処理)をするプログラムを作成するのに必要なwhile文、do文、for文について解説をしました。基本的にはwhile文を使えば反復処理を実現することはできますが、場合によってはdo文やfor文を使用するとよいということが理解できたでしょうか。これまでの解説で、プログラムの処理の流れを完全に制御するために必要な文法事項はすべて押さえたことになります。これでプログラムを見れば、どんな順番で処理が実行されているのかを把握することができるようになったはずです。これが分かるとプログラムを読む楽しみが増えてきます。いろいろなJavaのサンプルプログラムを探して読んでみるといいでしょう。
さて、処理の流れを制御することはできるようになりましたが、これを理解するだけではまだ十分ではありません。プログラミングにおいてはデータ構造というもう1つ重要なものがあります。つまり、プログラムの中でデータを扱うためのデータ構造について理解しなければ、実用的なプログラムを作成することはできません。基本的なデータ構造としては配列というものがあります。そこで、次回は配列について解説する予定です。
筆者プロフィール
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクト(http://www.jajakarta.org/)へ参加し、PMCの一員として活動を支えている。また、長野県の地域コミュニティである、SSS(G)(http://www.sssg.org/)やbugs(J)(http://www.bugs.jp/)の活動へも参加している。
Copyright © ITmedia, Inc. All Rights Reserved.