こんにちは、かつコーチです。
複数のデータをまとめて扱いたいとき、最初に学ぶのが配列(同じ型の値を複数まとめて格納できるデータ構造)です。
この記事では、配列の宣言から初期化、要素へのアクセス方法まで、初心者がつまずきやすいポイントとあわせて解説します。
配列とは?
配列が必要な理由
例えば5人分のテストの点数を扱いたいとき、score1、score2…と変数を5つ作るのは非効率です。
配列を使えば、1つの変数名で複数の値をまとめて管理できます。
配列の特徴
Javaの配列には以下の特徴があります。
- 同じ型の値しか格納できない(
intの配列にStringは入らない) - 一度作成すると要素数を変更できない(固定長)
- 各要素には
0から始まるインデックス(添字)でアクセスする
要素数を後から増減させたい場合は、配列ではなくArrayListなどのコレクションを使います。
この違いはコレクション編で改めて解説します。
基本の書き方:宣言・初期化
配列の宣言と初期化の3パターン
public class Main {
public static void main(String[] args) {
// パターン1: 宣言と同時に値を指定する
int[] scores = {80, 90, 70};
// パターン2: newで要素数を指定してから代入する
String[] names = new String[3];
names[0] = "田中";
names[1] = "佐藤";
names[2] = "鈴木";
// パターン3: newと初期値をまとめて書く
double[] prices = new double[]{100.0, 200.0, 300.0};
System.out.println(scores[0]);
System.out.println(names[1]);
System.out.println(prices[2]);
}
}
要素数だけを決めて後から値を入れたい場合はnew 型[要素数]の形を使います。
このとき、int配列は自動で0、String配列は自動でnull、boolean配列は自動でfalseが初期値として入ります。
配列の要素数を取得する
int[] scores = {80, 90, 70};
System.out.println(scores.length); // 3
配列の要素数はlengthというフィールド(メソッドではなくプロパティ)で取得します。length()とメソッドのように書いてしまうミスが非常に多いので注意しましょう。
よくあるつまずきポイント・エラー対処
length()と書いてハマった一次情報
私が初心者の頃、Stringのlength()メソッドに慣れていたため、配列でも同じように書いてしまいました。
❌ Before
int[] scores = {80, 90, 70};
System.out.println(scores.length()); // コンパイルエラー
これを実行しようとすると、cannot find symbolというコンパイルエラーが表示されます。
配列のlengthは括弧を付けないフィールドであり、Stringのlength()はメソッドであるという違いが原因です。
✅ After
int[] scores = {80, 90, 70};
System.out.println(scores.length); // 3
「配列はlength、文字列はlength()」と対で覚えておくと混同を防げます。
範囲外アクセスによる例外
❌ Before
int[] scores = {80, 90, 70};
System.out.println(scores[3]); // 実行時エラー
配列の添字は0, 1, 2までしか存在しないため、scores[3]にアクセスするとArrayIndexOutOfBoundsExceptionが発生します。
コンパイル時には検出されず、実行してはじめてエラーになる点に注意が必要です。
✅ After
int[] scores = {80, 90, 70};
if (scores.length > 3) {
System.out.println(scores[3]);
} else {
System.out.println("指定した添字は範囲外です");
}
添字を動的に扱うコードでは、事前にlengthと比較するガード処理を入れると安全です。
応用・一歩先の使い方
配列とArrays.toStringで中身を確認する
import java.util.Arrays;
int[] scores = {80, 90, 70};
System.out.println(scores); // [I@1b6d3586 のような文字列になる
System.out.println(Arrays.toString(scores)); // [80, 90, 70]
配列をそのままprintlnすると、中身ではなくメモリ上のハッシュ値を含む文字列が表示されてしまいます。java.util.ArraysクラスのtoStringメソッドを使うと、要素の中身を人間が読める形で確認できます。
デバッグ時によく使うテクニックなので覚えておきましょう。
まとめ
この記事のポイント
- 配列は同じ型の値を複数まとめて扱える固定長のデータ構造
- 宣言方法は「初期値指定」「newで要素数指定」「newと初期値の組み合わせ」の3パターン
- 要素数の取得は
lengthフィールド(メソッドではない)で行う - 範囲外の添字アクセスはArrayIndexOutOfBoundsExceptionを引き起こすため、境界条件に注意する
次に読むべき記事
- for文・while文で繰り返し処理
- 多次元配列の使い方
タグ: Java, 初心者向け, 基本文法