連載
» 2004年11月03日 00時00分 UPDATE

Eclipseではじめるプログラミング(5):Javaの反復処理を理解する (1/2)

[小山博史,@IT]
/fjava/index/index_eclipsejava.html

【改訂版】Eclipseではじめるプログラミング New!
これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、本連載「Eclipseではじめるプログラミング」の改訂版となります

 最近、筆者はあるDVD10枚をオンラインショッピングで購入して友人たちへ紹介しようとしました。ところが、あるサイトでは1枚単位でしかカートへ追加できないようになっていました。カートへの追加を10回繰り返すのは大変です。こんなとき、「同じDVDをカートへ追加する処理を10回繰り返すことができるプログラムを簡単に作成できたらうれしいだろうな」と感じました。もっと簡単なのは10枚一度にカートへ追加できればよいのですが、提供されていないので仕方がありません。さて、こういった同じような作業を繰り返すことをプログラムで実現できるように、大抵のプログラミング言語では反復処理のための文が用意されています。今回はJavaで用意されている反復処理のための文について解説します。

繰り返しの作業

 反復処理のための文について解説する前に、繰り返し同じような作業をすることが、身近にあるかどうかもう少し考えてみましょう。ちょっと考えれば分かりますが、意外とたくさんあることに気が付くと思います。例えば携帯電話を考えてみましょう。話を単純にするために、ここでは受信専用に使っている携帯電話について考えます。

 まず、携帯電話の電源を入れると受信待ちの状態になります。この状態のときに電話がかかってくると、着信状態になって着メロを流したりします。そこで電話を受けると、通話状態になって会話できるようになります。話が終わって電話を切ると、通話が終了して受信待ちの状態になります。携帯電話の電源を切るまで、これらを繰り返します。

 新幹線の切符を購入する自動販売機というのも同様です。これも「お客さんが乗りたい新幹線を選んで、行き先を選んで、お金を支払うと、切符とおつりを出す」という同じような作業をずっと繰り返しています。

 どうでしょうか。このほかにもたくさんあるかと思います。このように、繰り返し同じような作業をすることは多いので、Javaでもプログラムできちんと表現できるようになっています。具体的には、while文、do文、for文があります。それぞれ特長がありますので、どれを使うかは場面に応じて選択するのがよいでしょう。どんな特長があるかを意識しながら解説を読んでいただければと思います。それでは早速while文から見ていきましょう。

繰り返しをするとき(while文)

 例として1から10までの整数を合計した値を計算するプログラムの作成を考えましょう。 単純に考えると、1+2+3+4+5+6+7+8+9+10という式の計算結果をint型の変数x に代入して、xの値を表示するプログラムを思い付くのではないでしょうか。しかし、1から1000までの整数を合計した値を計算するプログラムを作成することになったときに、同じように実現しようとすると大変です。そこで、1+2+3+4+5+6+7+8+9+10という計算についてもう少しよく考えてみましょう。

 数字を1つずつ足していくと次のようになります。1+2の計算結果3に、2の次の3を足すと6になります。1+2+3の計算結果6に、3の次の4を足すと10になります。これを繰り返すと1から10までの整数を合計した値を計算することができます。

r12list0.gif

 これをプログラムとして表してみましょう(リスト1)。合計の値を保存するためにint型の変数sumを用意します。すると1から10までの整数を合計するプログラムはリスト1のようになります。sum = 0; のように最初にsumへ0を代入する処理をしてから計算を始めているのがちょっとした工夫になっています。もう1つのポイントとしては、計算途中でsum = sum+1; のようにsumを使った式の値をsumへ代入しているという処理があります。これは、プログラムを作るのに慣れていないとなかなか思い付かないのですが、よく使うテクニックなので覚えておきましょう。

リスト1 変数sumを使ったプログラム リスト1 変数sumを使ったプログラム

 次に1、 2、 3、 ……、 9、 10という1ずつ増えていく数字を保存するためにint型の変数iを用意して、これを使ってプログラムを書き直してみましょう。きっと、次のようになるはずです。ここで、プログラムでsum = sum + i; i = i + 1; という処理を書いてある行の後の方に、//で始まる文字列があります。この//で始まる文字列は、行末までプログラムのコメントになります。コメントというのはプログラムの説明をソースコード内に記述するためのもので、バイナリコードへコンパイルするときには無視されます。

リスト2 変数sumと変数iを使ったプログラム リスト2 変数sumと変数iを使ったプログラム

 リスト2を見れば分かるように、sum = sum + i; i = i + 1; という処理を10回繰り返せばsumに1から10までの整数を合計した結果が代入されることになります。この処理の流れを直感的に分かりやすくなるように図として表すと、図1のようになります。

図1 1から10までの整数を合計する処理の流れ 図1 1から10までの整数を合計する処理の流れ

 図1のような処理の流れを実現するためには、Javaではwhile文というものが用意されています。while文の構文は次のとおりです。条件分岐のif-then文のifのところがwhileに変わっただけですが、処理の流れはまったく違います。if-then文はそのまま次の文へ処理が流れていきましたが、while文の場合は条件式が真である間は処理の流れが戻ってきます。

while (条件式) 文


 図1の処理をwhile文で表すとリスト3のようになります。赤い枠で囲まれた部分とwhile文が対応するのが分かるはずです。リスト2と比較してみると、かなりすっきりしているのではないでしょうか。リスト2では繰り返しをする回数を知るためには、行数を数えたり、コメントを付けたりしないと分かりませんでしたが、while文を使えば、条件式からすぐに分かります。

リスト3 while文を使ったプログラム リスト3 while文を使ったプログラム

while文(サンプルプログラム)

 それでは、1から10までの整数を合計した値を計算するプログラムを作成して動作させてみましょう。第2回の「Eclipseの基本操作に慣れる」と同様にEclipseを起動し、パースペクティブを[Java]に切り替えておいてください。パースペクティブが[Java]になっていないときは、メニューの[ウィンドウ]→「パースペクティブを開く」→[Java]を指定すれば、切り替えることができます。今回は次のような手順で新規にクラスを作成することにします。

  1. [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
  2. 表示されるポップアップメニューで[新規]→[クラス]を指定
  3. 表示される[新規Javaクラス]ダイアログで、[名前]にSample50と入力
  4. 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
  5. [終了]ボタンをクリック

 出来上がったSample50クラスにリスト4の水色部分を追加してください。説明のときには「sum = sum + i; i = i + 1; という処理を10回繰り返す」と書きましたが、繰り返す処理を「sum = sum + i; System.out.println(sum); i++;」と若干変更して、計算過程を画面で確認できるようにしていますので注意してください。

リスト4 リスト4

 基本的な処理の内容については、ここまでの説明で十分理解できると思います。ここでは新しく出てきた文法について簡単に説明をしておきます。

 まず変数についてです。これまでは変数の宣言をしてから、値を代入するというように説明してきましたが、実はリスト4のように変数の宣言と同時に値を代入することもできます。つまり、int sum; sum = 0; を省略してint sum = 0; と書けると考えてよいのです。

 次に i++; という文についてです。この場合の++は後置インクリメント演算子といわれるものです。現時点ではi = i + 1; と同じ処理をするものだと覚えておけばよいでしょう。i--; というように使う演算子もあり、それは後置デクリメント演算子といわれます。--の場合はi = i - 1; と同じ処理をするものだと覚えておけばよいでしょう。

コラム 前置インクリメント演算子

ちなみに、前置インクリメント演算子という演算子を使うと、++i; のような文も書くことができます。これもi++; と同じでi = i + 1; と同じ処理をするものです。前置デクリメント演算子という演算子もあり、これを使うと --i; のような文も書くことができます。これもi--; と同じでi = i - 1; と同じ処理をするものです。++i、i = i + 1、i++は微妙な違いがありますが、ここではそこまでは説明しません。--i、i=i-1、i--についても同様です。


 リスト4のプログラムを実行すると画面1のような出力になります。1、1+2、1+2+3の足し算が実行されて、最終的に1+2+3+4+5+6+7+8+9+10が計算される様子が分かります。

1

3

6

10

15

21

28

36

45

55

画面1 実行結果
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。