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次元をしっかり理解してから触ると良いです。
デバッグ(初心者がやりがちなミスと対処)
- インデックスが0から始まる を忘れて
ArrayIndexOutOfBoundsExceptionに。
→i < arr.lengthを使う癖をつける。 - 長さを超える値を代入
→ 配列の作成時に指定した長さとアクセス箇所を確認する。 - 未初期化の配列にアクセス(参照が
nullの場合)
→int[] a; a[0] = 1;のようにするとエラー。必ずnewしてから使う。 - 入力数と配列長の不一致(ユーザー入力を想定していない)
→ 入力時にnを確認、必要なら再入力を促す実装にする。
練習問題(初心者向け) — 解答付き
問題は頭で考えてからコードを書いてみてください。
- 配列
{3, 7, 2, 9, 4}の合計を求めるコードを書け。
解答(要点):forで全要素足す → 合計 25 - 配列
{3, 7, 2, 9, 4}の奇数だけを表示するコードを書け。
解答(要点):if (arr[i] % 2 != 0) System.out.println(arr[i]);→ 3,7,9 - ユーザーが入力した整数配列の中で最小値を表示するプログラムを作れ。
解答(要点):先頭をminにしてループで更新する。 - 配列
int[] a = {1,2,3,4,5};を逆順に表示するコードを書け(forを使う)。
解答(要点):for (int i = a.length - 1; i >= 0; i--) System.out.println(a[i]); - 配列と拡張 for の違いを説明せよ。
解答(要点):拡張 for は要素の読み取りに簡潔。インデックスを使って要素を書き換えたい場合は通常の for が必要。
次に学ぶと良いこと(学習ロードマップ)
- 配列の検索・並び替え(線形探索、バブルソートなど)
- 配列を使ったアルゴリズムの基本(探索・集計)
- 多次元配列(2次元配列)
- Java の
ArrayList(可変長で使いやすい)との違いを理解する
