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

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

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

繰り返しをするときによく使う「while文」

 図1のような処理の流れを実現するためには、Javaでは「while文」というものが用意されています。while文の構文は次のとおりです。

while (条件式) 文

 条件分岐の「if- then文」のifのところがwhileに変わっただけですが、処理の流れはまったく違います。if-then文はそのまま次の文へ処理が流れていきましたが、while文の場合は条件式が真である間は処理の流れが戻ってきます。

while文を使ったプログラムwhile文を使ったプログラム

 図1の処理をwhile文で表すと、リスト3のようになります。図1赤い枠で囲まれた部分とwhile文が対応するのが分かるはずです。

リスト3 while文を使ったプログラム
sum = 0;
i = 1;

while (i <= 10) {
    sum = sum + i;
    i = i + 1;
}

 リスト2と比較してみると、かなりすっきりしているのではないでしょうか。リスト2では繰り返しをする回数を知るためには、行数を数えたり、コメントを付けたりしないと分かりませんでしたが、while文を使えば、条件式からすぐに分かります。

 この例では、条件式として「iが10以下である」ということを意味する「i <= 10」を指定しています。このことから、「iが10以下の間、sumへsum+iを代入する処理と、iを1増加する処理を繰り返す」ということが、すぐに分かります。

while文のサンプルプログラムを書いてみよう

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

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

 出来上がったSample40クラスをリスト4の内容になるように編集をしてください。説明のときには「sum = sum + i; i = i + 1; という処理を10回繰り返す」と書きましたが、繰り返す処理を「sum = sum + i; System.out.println(sum); i++;」と若干変更して、計算過程を画面で確認できるようにしているので、注意してください。動作確認ができるように、計算の途中でsumの値をコンソールへ出力するために「System.out.println(sum)」を追加しています。

リスト4
public class Sample40 {
    /**
    * @param args
    */

    public static void main(String[] args) {
        int sum = 0;
        int i = 1;

        while (i <= 10) {
            sum = sum + i;
            System.out.println(sum);
            i++;
        }
    }
}

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

 まず変数についてです。これまでは変数の宣言をしてから、値を代入するというように説明してきましたが、実はリスト4のように変数の宣言と同時に値を代入することもできます。つまり、「int sum; sum = 0;」の2つの処理を記述する代わりに、省略して「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のプログラムを実行すると、下記のような出力になります。変数sumの値がどのように変化しているのかが分かります。この結果から、「1」「1+2」「1+2+3」の足し算が実行されて、最終的に「1+2+3+4+5+6+7+8+9+10」が計算される様子が分かります。

リスト4の実行結果
1
3
6
10
15
21
28
36
45
55

繰り返す際に最低1回は処理をするときの「do文」

 while文では繰り返し実行する処理の前に条件式の判定をしていました。実際にプログラムを作成するようになると、「最低1回は処理をしてから、もう1度同じ処理をするかしないか条件式で判定をする」といった制御をしたい場合があります。そのために、Javaでは「do文」が用意されています。

 1から10までの整数を合計した値を計算するプログラムを作成するときにdo文を使うようにすると、処理の流れは図2のようになります。while文との違いが分かるように、while文の処理の流れも併記しました。

図2 do文を使った1から10までの整数を合計する処理の流れ 図2 do文を使った1から10までの整数を合計する処理の流れ

 do文の構文は次のとおりです。最後に「;(セミコロン)」が必要であることに注意しましょう。図2を見て分かるようにwhile文の条件式を記述する場所が移動しただけなので、処理を繰り返すという点についてはwhile文と同じように理解すればいいでしょう。

do 文 while (条件式);

 次ページでも、引き続きwhile文やdo文、for文について説明します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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