配列の要素
要素数を取得する
ArraySample01から出発して、ArraySample01Bという簡潔なコードまでたどり着きましたが、まだ一つだけ気になる点が残っています。 for文の条件「i < 5」の部分です。 このままでは、データが増えたときに、「5」という数字を書き換えてやらなければなりません。 データの個数が変わるたびに正確に数字を書き換えるのは、余計な神経を使うだけでなく、間違いのもとになることは容易に想像できるでしょう。
配列の要素数を取得する式を使えば、この問題も解決できます。尚、配列の要素数は長さ(length)とも呼ばれます。
構文 : 配列の要素数(長さ)
配列変数名.length
例えば、配列変数aがさす配列の長さは、次のように表されます。
a.length
ArraySample01Bのfor文の条件「i < 5」を「i < a.length」と変更してみましょう。
ArraySample01C.java
class ArraySample01C {
public static void main(String[] args) {
int[] a = {64, 75, 40, 92, 58};
for(int i = 0; i < a.length; i++){
System.out.println((i + 1) + "番の人の得点は" + a[i] + "点です。");
}
}
}
ArraySample01Cの実行結果は、ArraySample01と同じです。
ArraySample01Cの実行結果
1番の人の得点は64点です。 2番の人の得点は75点です。 3番の人の得点は40点です。 4番の人の得点は92点です。 5番の人の得点は58点です。
ArraySample01Cでは、次のように5個の要素で配列を初期化しています。
int[] a = {64, 75, 40, 92, 58};
従って、a.lengthの値は5となります。 後でデータを追加したとしても、a.lengthはその値を正しく表してくれます。 これでfor文の条件をいちいち書き換える煩わしさも無くなりました。
キーボードから各要素の値を入力する
これまでは、コードの中に予めデータが書かれていましたが、プログラムの実行時にデータを入力したい場合も有ります。 キーボードから配列の要素数と各要素の値を入力するプログラムを見てみましょう。
ArraySample02は、生徒数と人数分の得点を読み込んで、全員の得点を表示するプログラムです。 今回は合計と平均も表示してみましょう。
ArraySample02.java
import java.io.*; class ArraySample02 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("生徒数を入力してください。"); int num = Integer.parseInt(br.readLine()); //要素数を入力する int[] a =new int[num]; //配列を生成する System.out.println("人数分の得点を入力してください。"); int sum = 0; for(int i = 0; i < a.length; i++){ System.out.print((i + 1) + "番の人の得点 : "); a[i] = Integer.parseInt(br.readLine()); sum += a[i]; } for(int i = 0; i < a.length; i++){ System.out.println((i + 1) + "番の人の得点は" + a[i] + "点です。"); } System.out.println("合計は" + sum +"点です。"); System.out.println("平均は" + (double)sum / num +"点です。"); } }
ArraySample02の実行結果は、次のようになります。
ArraySample02の実行結果
生徒数を入力してください。 5 人数分の得点を入力してください。 1番の人の得点 : 80 2番の人の得点 : 67 3番の人の得点 : 92 4番の人の得点 : 74 5番の人の得点 : 85 1番の人の得点は80点です。 2番の人の得点は67点です。 3番の人の得点は92点です。 4番の人の得点は74点です。 5番の人の得点は85点です。 合計は398点です。 平均は79.6点です。
ArraySample02では、次のようにキーボードから入力された要素数を指定して配列を生成しています。
int num = Integer.parseInt(br.readLine()); //要素数を入力する int[] a =new int[num]; //配列を生成する
そして、1つ目のfor文で、iを0からa.length-1までインクリメントしながら、入力された値をa[i]に代入していきます。 このとき、同時並行で変数sumにa[i]の値を加算していきます。
for(int i = 0; i < a.length; i++){ System.out.print((i + 1) + "番の人の得点 : "); a[i] = Integer.parseInt(br.readLine()); sum += a[i]; }