はじめての配列は少しとっつきにくいけど、「同じ種類のデータを並べてしまえる箱」と思えばシンプルです。ここでは、ゼロからわかるように例題と一緒に丁寧に説明します。
配列ってなに?
- イメージ: 同じ型の値が並んだ「棚」。1段目、2段目…と番号がついていて、好きな段に入れて取り出せる。
- インデックス(番号): 0から始まる。3つの棚なら番号は0・1・2の3つ。
- 型を揃える: 配列の中は全部同じ型(intなら全部int)。混ぜられない。
// int型の値を3つ入れられる配列を作る
int[] scores = new int[3]; // まだ中身は0(初期値)
Java要素への代入と取り出し
- 代入(入れる): 指定した番号の場所に値を置く
- 例:「1段目(番号0)に50を置く」
- 参照(取り出す): 番号を指定して中身を見る
int[] scores = new int[3];
scores[0] = 50; // 1つ目(番号0)
scores[1] = 70; // 2つ目(番号1)
scores[2] = 90; // 3つ目(番号2)
System.out.println(scores[0]); // 50
System.out.println(scores[1]); // 70
System.out.println(scores[2]); // 90
Java- ポイント: 配列の長さが3なら、有効な番号は0〜2。3は存在しない。
よくあるエラーと安全な書き方
- 範囲外アクセスのエラー: 存在しない番号を使うと実行時にエラー(ArrayIndexOutOfBoundsException)
- 例:長さ3なのに
scores[3]やscores[-1]はNG
- 例:長さ3なのに
int[] scores = new int[3];
// scores[3] = 100; // ここでエラー(存在しないインデックス)
Java- 安全なループの鉄則:
i < 配列.lengthを使う- 配列の長さに合わせて自動で回るので、範囲外を避けられる
int[] scores = {50, 70, 90};
for (int i = 0; i < scores.length; i++) {
System.out.println("番号 " + i + " の値: " + scores[i]);
}
Java変数や式でインデックスを使う
- 変数で指定: 計算結果で場所を決められる
- 応用: 条件に応じて入れる位置を変える、など柔軟に使える
int[] boxes = new int[5];
int pos = 2;
boxes[pos] = 10; // boxes[2] に10
boxes[pos + 1] = 20; // boxes[3] に20
System.out.println(boxes[2]); // 10
System.out.println(boxes[3]); // 20
Java例題で練習
例題1:合計を求める
- 目的: 配列の全要素を取り出して合計する
int[] nums = {3, 8, 2, 5};
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i]; // 取り出した値を足す
}
System.out.println("合計は " + sum); // 18
Java- ポイント: ループで1つずつ取り出し、変数に溜める。
例題2:最大値を見つける
- 目的: 一番大きい値を探す
int[] nums = {12, 7, 25, 19};
int max = nums[0]; // 最初の要素を「仮の最大」にする
for (int i = 1; i < nums.length; i++) {
if (nums[i] > max) {
max = nums[i];
}
}
System.out.println("最大値は " + max); // 25
Java- ポイント: 比較しながら更新。最初の要素で初期化するのがコツ。
例題3:偶数だけ表示
- 目的: 条件で絞り込み
int[] nums = {4, 9, 12, 7, 6};
for (int i = 0; i < nums.length; i++) {
if (nums[i] % 2 == 0) { // 2で割って余り0なら偶数
System.out.println(nums[i]);
}
}
Java- ポイント: 配列×条件分岐で必要なものだけ処理。
つまずきやすいポイントの対策
- インデックスは0始まり: 3つなら0・1・2。最後の番号は「長さ-1」。
- lengthはプロパティ:
scores.lengthは「()」不要。メソッドじゃない。 - 初期値に注意:
intの配列は自動で0、booleanはfalse、Object系はnullが入る。 - 拡張for文(for-each): インデックス不要で中身を順番に取り出せる
int[] scores = {50, 70, 90};
for (int value : scores) {
System.out.println(value);
}
Java- 配列のサイズは固定:
new int[3]で作ったらサイズは変えられない。増やしたいなら新しい配列を作ってコピーするか、後でList(可変長)を学ぶ。
自分で手を動かす練習
練習1:平均値を小数で表示
- 課題:
int[] data = {10, 20, 35, 15};の平均をdoubleで出す
int[] data = {10, 20, 35, 15};
int sum = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
double average = (double) sum / data.length;
System.out.println("平均: " + average); // 20.0
Java練習2:特定の値の回数を数える
- 課題:
int[] nums = {1, 3, 1, 5, 1};の中の「1」が何回あるか
int[] nums = {1, 3, 1, 5, 1};
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 1) {
count++;
}
}
System.out.println("1の数: " + count); // 3
Java練習3:逆順に表示
- 課題:
int[] nums = {2, 4, 6, 8};を後ろから表示
int[] nums = {2, 4, 6, 8};
for (int i = nums.length - 1; i >= 0; i--) {
System.out.println(nums[i]); // 8, 6, 4, 2
}
Java次のステップ
- 配列の初期化のいろいろ:
{…}で一気に入れる、あとから代入する違いを確認 - 多次元配列: 「表」や「グリッド」のような二次元の並び
- ListやArrayList: 可変長のコレクションでサイズ問題を解決
