今回やること
配列は、同じ型の値を決まった個数だけまとめる仕組みです。3教科の点数をint[]へ入れ、位置による取得・更新・繰り返しを確認します。
前提: Java入門 #9 - while文までを終え、変数とfor文を使えること。
scores → [80, 75, 90]
index 0 1 2
| 特徴 | 意味 |
|---|---|
| 同じ型 | int[]ならすべて整数 |
| 固定長 | 作成後に要素数を増減できない |
| 0始まり | 最初は[0]、最後は[length - 1] |
1. 配列を宣言・初期化する
値が分かっている時は、波括弧でまとめて初期化できます。
int[] scores = {80, 75, 90};
int[]が整数配列の型、scoresが変数名です。3個の値を入れたためlengthは3です。
個数だけ先に決める書き方もあります。
int[] scores = new int[3];
この場合、各要素は整数の初期値0になります。今回の完成例では、値を同時に指定する最初の書き方を使います。
型ごとの代表的な初期値は次のとおりです。
| 配列の型 | newで作った直後の各要素 |
|---|---|
int[] | 0 |
double[] | 0.0 |
boolean[] | false |
String[] | null |
初期値が入っていても、学習用の点数として正しい値とは限りません。必要な要素へ値を設定してから計算します。
2. 添字で取得・更新する
角括弧の中の数字を添字(index)と呼びます。
System.out.println(scores[0]); // 80
scores[1] = 82; // 75を82へ更新
scores[1]は2番目の値です。人が数える「1番目」とindex 1を混同しないようにします。
値を読む時も更新する時も同じindexを使うため、各位置が何を表すかをコメントや変数名で明確にします。
| index | 更新前 | 更新後 |
|---|---|---|
| 0 | 80 | 80 |
| 1 | 75 | 82 |
| 2 | 90 | 90 |
3. lengthを使って合計する
通常のfor文ではindexを使えるため、各要素を順に取得できます。
int total = 0;
for (int i = 0; i < scores.length; i++) {
total += scores[i];
}
条件はi < scores.lengthです。<=にすると、最後に存在しないscores[3]へ進んでしまいます。
このfor文では、iが0、1、2の3回だけ本体を実行します。次にiが3になると3 < 3がfalseになり、配列へ触る前に終了します。lengthを条件へ使えば、配列の要素数を変更してもループ側の固定値を直す必要がありません。
4. 拡張for文で値を読む
indexが不要で、すべての値を読むだけなら拡張for文を使えます。
for (int score : scores) {
System.out.println(score);
}
この書き方では「何番目か」は直接分かりません。位置が必要なら通常のfor文を選びます。
完成コードを動かす
ArrayDemo.javaとして保存します。
public class ArrayDemo {
public static void main(String[] args) {
int[] scores = {80, 75, 90};
scores[1] = 82;
int total = 0;
for (int i = 0; i < scores.length; i++) {
total += scores[i];
}
double average = (double) total / scores.length;
System.out.println("教科数: " + scores.length);
System.out.println("平均: " + average);
for (int score : scores) {
System.out.println(score);
}
}
}
javac ArrayDemo.java
java ArrayDemo
(double)を付けてから割ることで、小数部分を残した平均になります。
成功確認
教科数: 3
平均: 84.0
80
82
90
2番目の値が82へ更新され、その値を使って平均が計算されれば成功です。
よくあるつまずき
scores[3]を読もうとする
長さ3の配列で有効なindexは0〜2です。範囲外へアクセスするとArrayIndexOutOfBoundsExceptionになります。最後の要素はscores[scores.length - 1]です。
for文をi <= scores.lengthにする
iがlengthと同じ値まで進み、範囲外になります。条件はi < scores.lengthです。
後から4件目を追加しようとする
配列の長さは固定です。要素数が変わる用途は、後で学ぶArrayListが向いています。
練習
1週間のうち3日分の歩数をint[]へ入れてください。2日目を更新し、lengthを使うfor文で合計、拡張for文で各値を表示します。
次のステップ
Java入門 #11 - メソッドで、配列を扱う処理にも名前を付けてまとめられるようにします。