第4回では、繰り返し処理(for 文・while 文)を学びました。
今回はいよいよ、「複数のデータをまとめて扱う」 ためのとても重要な機能 ── 配列(Array) を学びます。
「配列って言葉は聞いたことあるけど、なんだか難しそう…」と感じている方もご安心ください。 配列はマンションの部屋番号のようなもの、と理解すれば一気にイメージがつかめます。順番にゆっくり進めていきましょう。
この記事のゴール
「配列とは何か」「どう書くか」「実際にどう使うか」「ハマりがちなエラー」までを、一度に理解できる状態になることです。
そもそも配列とは?(現実世界のたとえで理解する)
ここまで学んできた変数は、「1 つの箱に 1 つのデータ」 を入れる仕組みでした。
int score1 = 80;
int score2 = 75;
int score3 = 90;
3 つくらいなら手書きでも OK ですが、クラス 30 人分の点数を扱うとなると…30 個の変数を作るのは現実的ではありません。 そこで登場するのが 配列(Array) です。
💡 イメージ: 配列は 「番号付きのロッカー」 のようなもの。 1 つの「箱の集まり」に名前を付け、0 番・1 番・2 番… と番号で各箱にアクセスできます。
| 配列の名前 | 0 番 | 1 番 | 2 番 | 3 番 | 4 番 |
|---|---|---|---|---|---|
scores | 80 | 75 | 90 | 60 | 85 |
これを Java で書くと、たった 1 行です。
int[] scores = {80, 75, 90, 60, 85};
これだけで 5 個の数値をまとめて保存 できます。とても便利ですね。
配列の宣言と初期化(3 パターン)
配列を作る書き方は、主に 3 パターンあります。初心者がまず覚えるべきは下記のパターン①です。
パターン① 中身を直接書く(もっとも簡単)
int[] scores = {80, 75, 90, 60, 85};
| 部分 | 意味 |
|---|---|
int[] | 「int 型の配列」という型を宣言 |
scores | 配列の名前(変数名と同じルール) |
= | 代入 |
{80, 75, 90, 60, 85} | 中身を 波カッコ {} で囲み、カンマ区切りで列挙 |
パターン② サイズだけ先に決めて、後から値を入れる
int[] scores = new int[5]; // サイズ5の空の配列を作成
scores[0] = 80;
scores[1] = 75;
scores[2] = 90;
scores[3] = 60;
scores[4] = 85;
💡
newキーワードは 「新しいメモリ領域を確保する」 という意味。今は「配列を作るときに必要なおまじない」と理解すれば OK です。
パターン③ 宣言と new を別の行で書く
int[] scores; // 宣言だけ
scores = new int[5]; // 後で配列を作成
実務では パターン①(直接書く)が圧倒的に多く使われます。まずはこのパターンに慣れましょう。
配列の要素にアクセスする(0 から始まる!)
配列の各要素には、インデックス(添字) という番号でアクセスできます。
⚠ 超重要: 配列のインデックスは 1 ではなく 0 から始まります。これは初心者がもっとも混乱するポイントです。
// 5 個の int をまとめた配列を作成
int[] scores = {80, 75, 90, 60, 85};
// ↑ ↑ ↑ ↑ ↑
// index: 0 1 2 3 4 (0 から始まる!)
System.out.println(scores[0]); // scores の 0 番目を取り出す → 80
System.out.println(scores[2]); // scores の 2 番目を取り出す → 90
System.out.println(scores[4]); // scores の 4 番目を取り出す → 85(最後の要素)
「5 個入っているから scores[5] でアクセスできる」と思いがちですが、scores[5] はエラーになります。5 個入っている配列のインデックスは 0〜4 までです。
配列の長さを取得する length
要素数が分からないときは、.length で取得できます。
int[] scores = {80, 75, 90, 60, 85};
System.out.println(scores.length); // 出力: 5
💡 String 型では
.length()と カッコ付き、配列では.lengthと カッコなしです。違いに注意!
配列とループの組み合わせ(これが配列の真価)
配列の真価は ループと組み合わせた時 に発揮されます。30 人分の点数の合計を、たった数行で計算できます。
for 文との組み合わせ
int[] scores = {80, 75, 90, 60, 85}; // 5 要素の配列
int total = 0; // 合計を入れる箱
// i を 0 から scores.length(=5)未満まで増やしながら繰り返す
for (int i = 0; i < scores.length; i++) { // i: 0, 1, 2, 3, 4 と動く
total = total + scores[i]; // scores[i] を total に加算
} // ループ終了時、total = 390
System.out.println("合計: " + total); // → 合計: 390
System.out.println("平均: " + total / scores.length); // → 平均: 78(390 / 5 の整数除算)
1 行ずつの意味:
int i = 0;— カウンタを 0 から開始(配列の最初)i < scores.length— i が配列の長さ未満の間ループ(=最後まで)i++— 毎回 i を 1 増やすtotal = total + scores[i];— i 番目の要素を total に足す
拡張 for 文(for-each)のほうがシンプル
第4回 で学んだ拡張 for 文を使うと、もっとシンプルに書けます。
int[] scores = {80, 75, 90, 60, 85};
int total = 0;
for (int s : scores) {
total += s;
}
System.out.println("合計: " + total); // 390
💡
total += sはtotal = total + sの省略形です。Java では+=-=*=/=のような 複合代入演算子がよく使われます。
ハマりがちなエラー TOP3
エラー① ArrayIndexOutOfBoundsException(範囲外アクセス)
int[] arr = {10, 20, 30};
System.out.println(arr[3]); // ❌ エラー!
原因: 3 要素の配列のインデックスは 0〜2。arr[3] は存在しません。
対処: ループ条件は i < arr.length で書くクセを付ける(<= ではない!)。
エラー② 配列の比較で == を使ってしまう
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false(値ではなく参照を比較するため)
対処: 配列の中身を比較したいときは Arrays.equals(a, b) を使う。
import java.util.Arrays;
System.out.println(Arrays.equals(a, b)); // true
エラー③ 配列を System.out.println でそのまま出す
int[] arr = {1, 2, 3};
System.out.println(arr); // [I@1540e19d のような変な文字列が出る
対処: 中身を見たいときは Arrays.toString(arr) を使う。
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
編集部からのポイント
配列はあらゆるプログラムで使われる基礎中の基礎。0 始まりと length の 2 つさえ押さえれば、ほぼ困ることはありません!
練習問題
以下のプログラムを書いてみましょう。
5 人のテストの点数
{72, 85, 60, 94, 50}から、合計点・平均点・最高点 を計算して表示してください。
解答例
public class ScoreStats {
public static void main(String[] args) {
int[] scores = {72, 85, 60, 94, 50}; // 5 人分のテスト点数
int total = 0; // 合計
int max = scores[0]; // 最大値の候補(最初は配列の 0 番目を仮置き)
// 拡張 for 文で配列の全要素を 1 つずつ s に取り出す
for (int s : scores) {
total += s; // 合計に加算
if (s > max) { // 現在の最大値より大きい場合
max = s; // 最大値を更新
}
}
System.out.println("合計: " + total); // → 361
System.out.println("平均: " + total / scores.length); // → 72(整数除算で切り捨て)
System.out.println("最高点: " + max); // → 94
}
}
実行結果:
合計: 361
平均: 72
最高点: 94
まとめ
第 5 回では、以下を学びました。
- ✅ 配列は「番号付きの箱の集まり」で、同じ型のデータをまとめて扱える
- ✅ 宣言と初期化は
int[] arr = {...};がもっともシンプル - ✅ インデックスは 0 から始まる(超重要!)
- ✅
.lengthで配列の長さを取得できる - ✅ ループ(for / 拡張 for)との組み合わせで真価を発揮
- ✅
Arrays.toString()で中身を確認、Arrays.equals()で比較
次回は、**処理をまとめて再利用できる「メソッド」**を学びます。 コードがどんどん整理されていく感動を体験できますよ。お楽しみに!