連載
» 2009年03月16日 00時00分 UPDATE

【改訂版】Eclipseではじめるプログラミング(4):プログラミングの真骨頂! Javaで“反復処理”を覚える (1/3)

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

[小山博史,株式会社ガリレオ]

プログラミングの真骨頂「反復処理」とは?

 筆者は知り合いに頼まれて、あるブログサイトの管理をしています。ブログのテンプレートを変更したり、Webサーバやメールサーバのメンテナンスをしたり、一通りのことをしています。

 あるとき、知り合いから、「メインページの記事一覧を表示するところで、各記事タイトルにアイコン画像を付けたい」というお願いをされました。記事のカテゴリによって、タイトルの前に付けるアイコン画像を変更したいということでした。@ITでも連載記事の前にはアイコンが付いていて、一目でお目当ての記事を見つけることができるようになっていますが、これと同じようなものにしたい、という要望でした。

 人間がこういった一覧を作成するのであれば、各記事についてカテゴリが何かを確認して、カテゴリに対応するアイコン画像を記事タイトルの前に挿入すればできてしまいますが、これをプログラムで実現するにはどうすればいいでしょう?

反復処理を覚えよう

 この処理をするためのプログラムでは、メインページに表示する記事一覧に含まれる各記事について、「記事のカテゴリに対応するアイコン画像をタイトルの前に挿入」という処理を繰り返し実行する必要があります。こういった同じような作業を繰り返すことをプログラムで実現できるように、大抵のプログラミング言語では「反復処理」のための文が用意されています。

 今回はJavaで用意されている反復処理のための文について解説します。EclipseでJavaプログラミングを始める準備がまだの方は、連載第1回の「Eclipse 3.4で超簡単Javaプログラミング基礎入門」で準備しておいてください。

あなたの身近にある「繰り返し」作業

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

携帯電話の「繰り返し」

 例えば、携帯電話を考えてみましょう。話を単純にするために、ここでは受信専用に使っている携帯電話について考えます。まず、携帯電話の電源を入れると、「受信待ち」の状態になります。この状態のときに電話がかかってくると、着信状態になって着メロを流したりします。そこで電話を受けると、通話状態になって会話できるようになります。話が終わって電話を切ると、通話が終了して受信待ちの状態になります。携帯電話の電源を切るまで、これらを繰り返します。

自動販売機の「繰り返し」

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

Javaの「繰り返し」はwhile、do、forはwhiledofor

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

「繰り返し」をプログラミングするには?

 例として1から10までの整数を合計した値を計算するプログラムの作成を考えましょう。単純に考えると、「1+2+3+4+5+6+7+8+9+10」という式の計算結果をint型の変数xに代入して、xの値を表示するプログラムを思い付くのではないでしょうか。

 しかし、1から1000までの整数を合計した値を計算するプログラムを作成することになったときに、同じように実現しようとすると、1から1000までの数値を+で連結した式を書くことになり、大変です。「((1+2)+3)+4」のように、繰り返し足し算をしていけば答えを出せますから、これをプログラムで表現するにはどうすればいいか、見てみましょう。

 まずは、「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までの整数を合計した値を計算できます。

1
3
6
10
15
21
28
36
45  
+2
+3
+4
+5
+6
+7
+8
+9
+10  
 
3
6
10
15
21
28
36
45
55  

プログラムに表すと……

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

 これは、プログラムを作るのに慣れていないとなかなか思い付かないのですが、よく使うテクニックなので覚えておきましょう。

リスト1 変数sumを使ったプログラム
sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
sum = sum + 5;

…(省略)…

sum = sum + 9;
sum = sum + 10;

変数に変数を加算する

 次に1、2、3、……、9、10という1つずつ増えていく数字を保存するためにint型の変数iを用意して、これを使ってプログラムを書き直してみましょう。きっと、次のようになるはずです。「sum = sum + i」で数字を1つずつ加算し、「i = i + 1」で加算する値を計算しています。

リスト2 変数sumと変数iを使ったプログラム
sum = 0;
i = 1;
sum = sum + i; i = i + 1; // sum + 1, i = 2
sum = sum + i; i = i + 1; // sum + 2, i = 3
sum = sum + i; i = i + 1; // sum + 3, i = 4
sum = sum + i; i = i + 1; // sum + 4, i = 5
sum = sum + i; i = i + 1; // sum + 5, i = 6

…(省略)…

sum = sum + i; i = i + 1; // sum + 9, i = 10
sum = sum + i; i = i + 1; // sum + 10, i = 11

コラム 「プログラミングに欠かせない“コメント”とは?」

ここで、プログラムで「sum = sum + i;i = i + 1;」という処理を書いてある行の後の方に、「//」で始まる文字列があります。この//で始まる文字列は、行末までプログラムの「コメント」になります。

コメントというのは、プログラムの説明をソースコード内に記述するためのもので、バイナリコードコンパイルするときには無視されます。「/*」と「*/」で囲んだ文字列もコメントになります。


 リスト2を見れば分かるように、「sum = sum + i; i = i + 1;」という処理を10回繰り返せばsumに1から10までの整数を合計した結果が代入されることになります。ポイントは、「同じ処理を10回繰り返す」という点です。

図で表すと……

 この処理の流れを直感的に分かりやすくなるように図として表すと、図1のようになります。

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

 次ページからは、いよいよwhile文やdo文、for文を使い始め、インクリメント/デクリメント演算子についても説明します。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

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

RSSについて

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

メールマガジン登録

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