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

Java Java
スポンサーリンク

Java の配列(array)は「同じ型の値を並べて扱う箱」です。ひとつずつ順を追って、図・コード・練習問題(解答付き)までまとめます。

配列って何?イメージで理解

配列は「同じ型の箱が横並びになったもの」。
箱には番号(インデックス)が振られていて、0 から始まるのがポイント。

num: ┌──┬──┬──┬──┐
     │10 │ 8 │ 16 │ 5 │
     └──┴──┴──┴──┘
index:  0    1    2    3

num[0] は一番左の箱(10)を指します。num[3] は一番右(5)を指します。


配列の基本操作(宣言・生成・代入・参照)

以下、1行ずつやっていることを説明します。

// 宣言 + 生成(要素数4)
int[] num = new int[4];

// 値を代入(各要素に値を入れる)
num[0] = 10;
num[1] = 8;
num[2] = 16;
num[3] = 5;

// 参照して表示
System.out.println(num[0]); // -> 10
Java

ポイント:

  • int[] num:int型の配列を参照する変数 num を宣言
  • new int[4]:要素数(長さ)4の配列を作る
  • num[i]:インデックス i の要素にアクセス(代入・参照)

配列の長さを使う(安全にループする)

配列の長さは num.length で取得できます。ループは必ず 0 <= i < num.length にします。

for (int i = 0; i < num.length; i++) {
    System.out.println("num[" + i + "] = " + num[i]);
}
Java

これにより、要素数が変わってもループ条件を直す必要がなく安全です。


よくある例外 — 範囲外アクセス

int[] a = new int[3];
a[3] = 9; // 実行時に ArrayIndexOutOfBoundsException が出る
Java

理由:インデックス 3 は存在しない(使えるのは 0,1,2)。配列は 0 から length−1 まで


実用的な例題(コード+説明)

例題1:配列の全要素の合計を求める

int[] nums = {10, 8, 16, 5};
int sum = 0;
for (int i = 0; i < nums.length; i++) {
    sum += nums[i];
}
System.out.println("合計: " + sum); // 合計: 39
Java

説明:sum += nums[i] で順に足していきます。

例題2:配列の最大値を見つける

int[] nums = {10, 8, 16, 5};
int max = nums[0];
for (int i = 1; i < nums.length; i++) {
    if (nums[i] > max) {
        max = nums[i];
    }
}
System.out.println("最大値: " + max); // 最大値: 16
Java

ポイント:最初に nums[0] を仮の最大値にして、残りで更新します。

例題3:拡張 for(for-each)を使う(読み取り専用が簡単)

for (int v : nums) {
    System.out.println(v);
}

説明:順番に nums の要素を v に代入して処理します。インデックスが不要なときに便利。


ミニアプリ:ユーザー入力で平均を出す(Scanner使用)

実際にユーザーから入力を受け取る例。コンソールで動かせます。

import java.util.Scanner;
public class AverageApp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("何個の数を入力しますか?: ");
        int n = sc.nextInt();

        // 要素数 n の配列を作る
        int[] arr = new int[n];

        // 入力
        for (int i = 0; i < n; i++) {
            System.out.print("arr[" + i + "] = ");
            arr[i] = sc.nextInt();
        }

        // 合計を求めて平均を出す
        int sum = 0;
        for (int v : arr) sum += v;
        double avg = (n > 0) ? (double) sum / n : 0.0;

        System.out.println("合計: " + sum);
        System.out.println("平均: " + avg);
        sc.close();
    }
}
Java

注意点:

  • n が 0 のときに割り算をしないように三項演算子でガード。
  • 実際はユーザー入力の検証(負の値や数字でない入力)も必要です。

配列の初期化のいろいろな書き方

int[] a = new int[3];         // [0,0,0]
int[] b = {1, 2, 3};          // 宣言と同時に初期値
int[] c = new int[] {4, 5, 6}; // new を明示
Java

多次元配列(簡単な触り)

2次元配列は「表(行列)」のイメージ:

int[][] table = {
    {1,2,3},
    {4,5,6}
};
// table[0][1] -> 2
Java

初心者は1次元をしっかり理解してから触ると良いです。


デバッグ(初心者がやりがちなミスと対処)

  1. インデックスが0から始まる を忘れて ArrayIndexOutOfBoundsException に。
    i < arr.length を使う癖をつける。
  2. 長さを超える値を代入
    → 配列の作成時に指定した長さとアクセス箇所を確認する。
  3. 未初期化の配列にアクセス(参照が null の場合)
    int[] a; a[0] = 1; のようにするとエラー。必ず new してから使う。
  4. 入力数と配列長の不一致(ユーザー入力を想定していない)
    → 入力時に n を確認、必要なら再入力を促す実装にする。

練習問題(初心者向け) — 解答付き

問題は頭で考えてからコードを書いてみてください。

  1. 配列 {3, 7, 2, 9, 4} の合計を求めるコードを書け。
    解答(要点):for で全要素足す → 合計 25
  2. 配列 {3, 7, 2, 9, 4} の奇数だけを表示するコードを書け。
    解答(要点):if (arr[i] % 2 != 0) System.out.println(arr[i]); → 3,7,9
  3. ユーザーが入力した整数配列の中で最小値を表示するプログラムを作れ。
    解答(要点):先頭を min にしてループで更新する。
  4. 配列 int[] a = {1,2,3,4,5}; を逆順に表示するコードを書け(for を使う)。
    解答(要点):for (int i = a.length - 1; i >= 0; i--) System.out.println(a[i]);
  5. 配列と拡張 for の違いを説明せよ。
    解答(要点):拡張 for は要素の読み取りに簡潔。インデックスを使って要素を書き換えたい場合は通常の for が必要。

次に学ぶと良いこと(学習ロードマップ)

  1. 配列の検索・並び替え(線形探索、バブルソートなど)
  2. 配列を使ったアルゴリズムの基本(探索・集計)
  3. 多次元配列(2次元配列)
  4. Java の ArrayList(可変長で使いやすい)との違いを理解する
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました