繰り返し構文について
続いて、繰り返し構文へと進みましょう。これも、何種類かのものが用意されていますが、最もよく使われるのは「while文」と「for文」の2種類のものでしょう。
while文
while (条件){
……繰り返す処理……
}
これは、繰り返しに関する条件を用意し、その条件が成立する間、指定された処理部分を繰り返し実行するというものです。これは次のような形で記述します。
条件の部分には、if文と同様に「真偽値」で表される値や比較演算子による式などが設定されます。構文に入ると、まずこの条件をチェックし、trueであればその後の{ }内にある処理を実行します。実行後、再び条件をチェックし、trueならば再び{ }内を実行する……ということを繰り返し、条件がfalseになったら構文を抜けて次へと進みます。
public static void main(String[] args){ int x = 100; // 適当に整数を用意 int total = 0; while(x > 0){ total += x; x = x - 1; } System.out.println("合計は、" + total + "であります。"); }

ここでは、「total += x;」という変わった式が登場していますね。これは「totalにxを加算する」というものです。要するに、「total = total + x;」と同じものを、もうちょっとスマートに書いたものというわけです。こうした「変数に値を加減乗除する」というものは、「代入演算子」と呼ばれる形で用意されています。
| += | 右辺を左辺に加算する |
| -= | 右辺を左辺から減算する |
| *= | 右辺を左辺に乗算する |
| /= | 右辺で左辺を除算する |
| %= | 右辺で左辺を割った余りを左辺に再設定する |
この他に、特にこの後で登場する「繰り返し」構文で多用されるものとして「変数の値を1増やす」「1減らす」という特別な演算子も用意されています。
| ++ | 変数の値を1増やす |
| -- | 変数の値を1減らす |
これらは、変数の前か後につけて使います。例えば、「++A」「A++」といった具合です。これで変数の値を1増減することができます。値の代入をする式などは不要です。
for文
これは、繰り返しに入る際の初期化処理、繰り返し条件、繰り返すごとに実行する処理といったものを一つの構文にまとめてしまったものです。これは次のような形をしています。
for (初期化処理; 条件; 繰り返し時処理){
……繰り返す処理……
}
| 初期化処理 | 繰り返しに入る際に1度だけ実行する処理 |
| 条件 | 繰り返しを続けるかチェックするためのもの |
| 繰り返し時処理 | 繰り返し後、これを実行する |
このforの動作は、whileよりも複雑です。このfor構文に入ると、まず最初に「初期化処理」に書かれている処理を実行します。そして「条件」をチェックし、それが成立していればその後の{ }部分の処理を実行します。実行後、「繰り返し時処理」にある処理を行ってから、再び繰り返しの最初に戻り、また「条件」をチェックして……ということを繰り返すわけです。
「初期化処理」は、構文に入る際に1度だけしか実行しません。これに対し、「繰り返し時処理」は繰り返すごとに実行します。それぞれの働きの違いをよく頭に入れておきましょう。では、これも簡単な例を挙げておきます。
public static void main(String[] args){ int x = 100; // 適当な数字 int total = 0; for(int i = 1;i <= x;i++){ total += i; } System.out.println("合計は、" + total + "であります。"); }
比べてみると分かりますが、繰り返し処理というのは、whileでもforでも大体同じように実装できるのです。「この場合は、どちらを使った方が便利か」という違いでしかない、といってよいでしょう。この例のように、繰り返すごとの処理がはっきりしている場合にはforを使った方がすっきりするでしょう。
forでは、まず最初に「int i = 1」で変数iというものを用意し、これに1を設定していますね。そして、この値が「i <= x」である間は繰り返しを続けます。繰り返し部分を実行したら、「i++」でiの値を1増やしています。こうすると、繰り返すごとに変数iの値は1ずつ増えていき、xの値を超えてi <= xが成り立たなくなったら(つまりiがxより大きくなったら)繰り返しを抜けるようになるわけです。
この繰り返し構文は、特に先ほどの「配列」と組み合わせたときに威力を発揮します。配列の中にいくつかの値を入れておき、そのすべての値に対して何かの処理をする、というようなときに便利なのです。
public static void main(String[] args){ int[] arr = new int[]{25,48,87,62,58,19,76}; //適当に値を用意 int num = 7; // 配列の要素数 int total = 0; for (int i = 0;i < num;i++){ total += arr[i]; } int ave = total / num; System.out.println("平均:" + ave); }

例えば、これは配列に用意した整数をすべて合計し、平均を出して表示するものです。forで定義している変数iを使い、arr[i]というようにして繰り返しで配列の要素を順番に取り出しては処理していることが分かるでしょう。
Java 5からは、forがさらに拡張され、配列の値を自動的に変数へと取り出せるような形で記述できるようになりました。また、ここにあげた他に、whileの条件を繰り返しの最後に行うようなものもあります。とりあえず、ここにあげたwhileとforが分かれば繰り返しで困ることはありませんが、余裕がある人はその他にどんな繰り返しがあるか調べてみると面白いでしょう。
