テストの点数を5人分あつかいたいとき、変数を5つ並べるとどうなるでしょうか。配列を使うと、同じ型の値をひとまとめにして番号で管理できます。
実行環境は引き続きブラウザ上のもの(paiza.IO や OneCompiler)です。
変数を並べる限界
5人分の点数を変数で持つと、こうなります。
public class Main {
public static void main(String[] args) {
int score0 = 80;
int score1 = 70;
int score2 = 90;
int score3 = 60;
int score4 = 85;
System.out.println(score0);
System.out.println(score1);
System.out.println(score2);
System.out.println(score3);
System.out.println(score4);
}
}
5人なら何とかなりますが、30人になると変数も println も30行ずつ必要です。
配列で書き直す
配列を使うと、5人分の点数を1行で書けます。
public class Main {
public static void main(String[] args) {
int[] scores = {80, 70, 90, 60, 85};
System.out.println(scores[0]);
System.out.println(scores[2]);
}
}
80
90
int[] は「int 型の配列」を意味します。{80, 70, 90, 60, 85} の5つの値がまとめて scores に入ります。
インデックスは 0 から始まる
配列の各値には、0 から始まる番号(インデックス)がつきます。
| インデックス | scores[0] | scores[1] | scores[2] | scores[3] | scores[4] |
|---|---|---|---|---|---|
| 値 | 80 | 70 | 90 | 60 | 85 |
先頭が [0] で、最後が [4](要素数 5 − 1)です。scores[5] と書くとエラーになります。
要素を書き換える
配列の要素は、ふつうの変数と同じように代入で上書きできます。
public class Main {
public static void main(String[] args) {
int[] scores = {80, 70, 90, 60, 85};
System.out.println("変更前: " + scores[1]);
scores[1] = 95;
System.out.println("変更後: " + scores[1]);
}
}
変更前: 70
変更後: 95
scores[1] = 95; で、2番目の要素が 70 から 95 に変わりました。
for 文で全要素を処理する
配列と for 文を組み合わせると、要素数がいくつでも同じコードで処理できます。
public class Main {
public static void main(String[] args) {
int[] scores = {80, 70, 90, 60, 85};
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum = sum + scores[i];
}
System.out.println("合計: " + sum);
System.out.println("平均: " + sum / scores.length);
}
}
合計: 385
平均: 77
scores.length は要素数(ここでは 5)を返します。for 文の条件を i < scores.length にすれば、要素数が変わってもコードを直す必要がありません。
平均が 77.0 ではなく 77 になっているのは、int 同士の割り算で小数が切り捨てられるためです(計算の回で見た動きと同じです)。
配列をメソッドに渡す
前回学んだメソッドに配列を渡すこともできます。
public class Main {
public static void main(String[] args) {
int[] scores = {80, 70, 90, 60, 85};
System.out.println("合計: " + total(scores));
}
static int total(int[] data) {
int sum = 0;
for (int i = 0; i < data.length; i++) {
sum = sum + data[i];
}
return sum;
}
}
合計: 385
int[] data で配列を受け取り、合計を計算して return しています。main は「合計を出す処理の中身」を知らなくてよくなりました。
次の回へ
配列は便利ですが、要素を途中に追加したり削除したりするのが苦手です。次回は、要素数を柔軟に変えられる ArrayList を見ます。