配列と拡張for文
拡張for文で配列を簡単に扱う
これまで見てきたように、配列はほとんどの場合for文と組み合わせて使われます。 そのため、配列やコレクションクラスなどを簡単に扱うための特別なfor文も用意されています。 このfor文は拡張for文(enhanced for statement)と呼ばれ、J2SE 5.0以降で利用できるようになったものです。
コレクションクラスについては後で学習します。
拡張for文に対して、第7章で学習したfor文は基本for文と呼ばれます。
拡張for文は、次のような構文になります。
構文 : 拡張for文
for(要素の型 変数名 : 配列変数名){ 文1 文2 ... }
配列変数名で指定された配列の先頭から、要素を次々に取り出しながら繰り返しを実行していきます。 そして、配列本体では、変数名を使ってその要素にアクセスすることができます。 インデックスで各要素を指定する必要はありません。
それでは、拡張for文の使用例を見てみましょう。 ArraySample09は、いろいろな半径に対する円周を計算するプログラムです。
ArraySample09.java
class ArraySample09 { public static void main(String[] args) { double[] radii = {1.0, 2.0, 3.0, 4.0}; double pi = 3.14; for(double radius : radii){ System.out.println("半径" + radius + "の円の円周 = " + 2 * pi * radius); } } }
ArraySample09の実行結果
半径1.0の円の円周 = 6.28 半径2.0の円の円周 = 12.56 半径3.0の円の円周 = 18.84 半径4.0の円の円周 = 25.12
ArraySample09では、配列の初期化により、配列radiiに4つの半径を格納しています。
double[] radii = {1.0, 2.0, 3.0, 4.0};
英語のradiusとは半径という意味で、radiiはその複数形です。
そして、拡張for文では、配列radiiの先頭から順番に要素を取り出し、それを変数radiusに代入しながら、繰り返しを実行していきます。
for(double radius : radii){ System.out.println("半径" + radius + "の円の円周 = " + 2 * pi * radius); }
1回目の繰り返しでは、変数radiusにはradii[0]の値、即ち1.0が格納されています。 したがって、「2 * pi * radius」の値は、6.28となります。 2回目の繰り返しでは、変数radiusにはradii[1]の値、即ち2.0が格納されて....というように繰り返えされていきます。 4回目の繰り返しが終わるとループを抜け出します。
繰り返し回数 | radiusの値 | 2 * pi * radius の値 |
表示内容 |
---|---|---|---|
1 | 1.0 | 6.28 | 半径1.0の円の円周 = 6.28 |
2 | 2.0 | 12.56 | 半径2.0の円の円周 = 12.56 |
3 | 3.0 | 18.84 | 半径3.0の円の円周 = 18.84 |
4 | 4.0 | 25.12 | 半径4.0の円の円周 = 25.12 |
拡張for文は、先頭から順番に各要素に取り出すことだけに向いています。 最後尾から先頭に向かって要素を取り出していったり、配列の途中から要素を取り出していくこと等は、スマートな形ではできません。 そういう処理には、拡張for文は向いていません。
また、各要素の値を取り出すことはできますが、各要素に値を代入することは、やはりスマートな形ではできません。 そういった処理のためには、基本for文を使って、インデックスによって各要素を指定する方法をとるべきでしょう。
もちろん、要素がString型のような参照型の場合でも、拡張for文は使えます。
ArraySample10.java
class ArraySample10 { public static void main(String[] args) { String[] versions = {"95", "98", "2000", "Me", "XP", "Vista", "7"}; for(String ver : versions){ System.out.println("Windows " + ver); } } }
ArraySample10の実行結果
Windows 95 Windows 98 Windows 2000 Windows Me Windows XP Windows Vista Windows 7
拡張for文を使うと、配列の各要素の値を簡単に取り出すことができる。