Java | 配列の初期化

Java Java
スポンサーリンク

配列(array)とは?

配列は「同じ型の値(データ)をたくさん並べて保存する箱」です。
一つ一つの箱にはインデックス(番号)が付き、0から始まります。

例:int[] nums = new int[3]; は、整数が3つ入る箱を作る、という意味。


1. 配列の作り方(宣言と生成)

int[] nums;           // 宣言(配列への参照を置く変数を作る)
nums = new int[3];    // 生成(要素数3の配列を作る)
Java

まとめて書くと:

int[] nums = new int[3];
Java

規定値(デフォルト値)

配列を new で作ると、要素には自動的に初期値が入ります(未代入でも安全に参照できる状態)。

  • 数値型(int, long, double…) → 0 または 0.0
  • boolean → false
  • 参照型(String, Integer, Object…) → null

例:

int[] a = new int[2];
System.out.println(a[0]); // 0
System.out.println(a[1]); // 0

String[] s = new String[2];
System.out.println(s[0]); // null
Java

ポイント:配列要素は「ローカル変数」とは違い、new で作れば規定値が入るので未初期化エラーになりません。


2. 宣言と同時に値を入れる(リテラル初期化)

要素を作ると同時に中身を決めると簡単です:

int[] nums = {4, 10, 7}; 
// nums[0] = 4, nums[1] = 10, nums[2] = 7
Java

この書き方だと配列の長さは {} の中の要素数になります。

注意:一度 int[] nums = new int[3]; と宣言した後に、単に nums = {4,10,7}; と書くのはエラーになります。
代わりに次のように書きます:

nums = new int[]{4, 10, 7}; // 新しい配列を作って代入
Java

3. 要素の取り出し・代入

int[] a = {1, 2, 3};
int x = a[1];   // x = 2(インデックスは0から)
a[2] = 99;      // a の 3 番目の要素を 99 に変更
Java

配列長は .length で取れます(メソッドではなくフィールド):

int len = a.length; // 3
Java

4. よくある間違い・落とし穴

  • インデックス越え(ArrayIndexOutOfBoundsException
    a[3] を参照するとエラー(長さ3の配列はインデックス0,1,2)。
  • null の扱い(参照型の配列)
    String[] s = new String[2]; s[0].length() を呼ぶと NullPointerException になるので、要素が null でないことを確認する。
  • 部分的に初期化したつもりの誤認
    new int[5] は5個すべて 0 が入る。要素ごとに値を入れないと期待した値にならない。

5. 実用的な例題(初心者向け、入力あり)

例題A:成績平均を出す(コンソール入力)

import java.util.Scanner;

public class Average {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("何人分の点数を入力しますか?: ");
        int n = sc.nextInt();
        int[] scores = new int[n];

        for (int i = 0; i < n; i++) {
            System.out.print((i+1) + "人目の点数: ");
            scores[i] = sc.nextInt(); // 要素に代入
        }

        int sum = 0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }
        double avg = (double) sum / scores.length;
        System.out.println("合計: " + sum + " 平均: " + avg);
        sc.close();
    }
}
Java

出力例:

何人分の点数を入力しますか?: 3
1人目の点数: 70
2人目の点数: 85
3人目の点数: 90
合計: 245 平均: 81.66666666666667

例題B:買い物カゴ(文字列配列)

import java.util.Scanner;
public class Cart {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("何品追加しますか?: ");
        int n = sc.nextInt();
        sc.nextLine(); // 改行を消す
        String[] cart = new String[n];

        for (int i = 0; i < n; i++) {
            System.out.print("商品名を入力: ");
            cart[i] = sc.nextLine();
        }

        System.out.println("カートの中身:");
        for (int i = 0; i < cart.length; i++) {
            System.out.println((i+1) + ": " + cart[i]);
        }
        sc.close();
    }
}
Java

6. 練習問題

各問、コードを書いて動かしてみてください。後で解答を確認できます。

  1. int[] a = new int[4]; を作り、要素に 5, 10, 15, 20 を代入して出力するプログラムを書け。
  2. double[] 配列を初期化リテラルで {1.5, 2.5, 3.0} として、合計と平均を表示せよ。
  3. String[] names = new String[3]; を作って、null チェックをせずに names[0].length() を呼ぶとどうなるか説明せよ(実行例を示す)。
  4. 整数配列が与えられたとき、最小値と最大値を求めるメソッドを作れ。
  5. 配列を逆順に並び替える( in-place )プログラムを書け(追加配列を使わない)。

7. 練習問題の解答(ヒント・サンプル)

int[] a = new int[4];
a[0] = 5;
a[1] = 10;
a[2] = 15;
a[3] = 20;
for (int i = 0; i < a.length; i++) System.out.println(a[i]);
Java
double[] d = {1.5, 2.5, 3.0};
double sum = 0;
for (double v : d) sum += v;
System.out.println("合計: " + sum);
System.out.println("平均: " + (sum / d.length));
Java
  1. names[0]null なので names[0].length() を呼ぶと NullPointerException が発生します。
    実行例(説明用): Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:5)
public static int[] minMax(int[] arr) {
    int min = arr[0];
    int max = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] < min) min = arr[i];
        if (arr[i] > max) max = arr[i];
    }
    return new int[]{min, max};
}
Java
public static void reverse(int[] arr) {
    int i = 0, j = arr.length - 1;
    while (i < j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
        i++; j--;
    }
}
Java

8. 発展:配列 vs. コレクション(ちょっとだけ)

  • 配列はサイズが固定(作った後に長さを変えられない)。
  • 可変長が欲しいときは ArrayList などのコレクションを使う。
    例:ArrayList<String> list = new ArrayList<>(); list.add("apple");

初心者はまず配列で「固定長での扱い」を練習し、その後 ArrayList に移ると理解しやすいです。


まとめ(覚えておくべきポイント)

  • 配列は同じ型の値をまとめて管理。インデックスは 0 始まり。
  • new 型[長さ] で作ると要素には規定値(0 / false / null)が入る。
  • 宣言と同時に {値, ...} で初期化できる。既存変数にそのまま {...} を代入するのは不可(new 型[]{...} を使う)。
  • .length で長さを取得。範囲外アクセスは例外になる。
  • 参照型の要素は null の可能性があるので注意。
タイトルとURLをコピーしました