Java | 配列の「要素へのアクセス」と「インデックス」

Java Java
スポンサーリンク

はじめての配列は少しとっつきにくいけど、「同じ種類のデータを並べてしまえる箱」と思えばシンプルです。ここでは、ゼロからわかるように例題と一緒に丁寧に説明します。


配列ってなに?

  • イメージ: 同じ型の値が並んだ「棚」。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
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: 可変長のコレクションでサイズ問題を解決
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました