配列(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}; // 新しい配列を作って代入
Java3. 要素の取り出し・代入
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
Java4. よくある間違い・落とし穴
- インデックス越え(
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();
}
}
Java6. 練習問題
各問、コードを書いて動かしてみてください。後で解答を確認できます。
int[] a = new int[4];を作り、要素に 5, 10, 15, 20 を代入して出力するプログラムを書け。double[]配列を初期化リテラルで{1.5, 2.5, 3.0}として、合計と平均を表示せよ。String[] names = new String[3];を作って、nullチェックをせずにnames[0].length()を呼ぶとどうなるか説明せよ(実行例を示す)。- 整数配列が与えられたとき、最小値と最大値を求めるメソッドを作れ。
- 配列を逆順に並び替える( 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]);
Javadouble[] 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));
Javanames[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};
}
Javapublic 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--;
}
}
Java8. 発展:配列 vs. コレクション(ちょっとだけ)
- 配列はサイズが固定(作った後に長さを変えられない)。
- 可変長が欲しいときは
ArrayListなどのコレクションを使う。
例:ArrayList<String> list = new ArrayList<>(); list.add("apple");
初心者はまず配列で「固定長での扱い」を練習し、その後 ArrayList に移ると理解しやすいです。
まとめ(覚えておくべきポイント)
- 配列は同じ型の値をまとめて管理。インデックスは 0 始まり。
new 型[長さ]で作ると要素には規定値(0 / false / null)が入る。- 宣言と同時に
{値, ...}で初期化できる。既存変数にそのまま{...}を代入するのは不可(new 型[]{...}を使う)。 .lengthで長さを取得。範囲外アクセスは例外になる。- 参照型の要素は
nullの可能性があるので注意。
