Javaの配列の「長さ」を、初心者向けに丁寧解説
配列は「同じ種類のデータをまとめて入れておく箱の列」。その箱がいくつあるか(要素数)を調べるのが「配列の長さ」で、Javaでは 配列変数.length と書きます。これを使うと、配列の全要素を安全に処理できます。
配列の長さの基本
- 書き方:
配列変数.length(丸括弧は不要。メソッドではなく「フィールド」) - 固定サイズ:
配列は作ったときのサイズが固定です。lengthの値は変えられません。 - 例(作成直後の長さ):
int[] num = new int[3];
System.out.println(num.length); // 3
Java- 例(初期化子の配列):
int[] nums = {14, 7, 9};
System.out.println(nums.length); // 3
Javaループで使うときの定番パターン
- インデックスで回す(for文):
int[] nums = {14, 7, 9};
for (int i = 0; i < nums.length; i++) {
System.out.println("index " + i + ": " + nums[i]);
}
Javaポイント:
境界: 先頭は 0、最後は length - 1。
安全: length を使えば配列のサイズが変わっても正しく回る。
- 要素をそのまま回す(拡張for):
int[] nums = {14, 7, 9};
for (int value : nums) {
System.out.println(value);
}
Javaポイント:
シンプル: インデックスが不要。
用途: 位置(何番目か)を使わない処理に最適。
よくあるつまずきと回避法
- lengthはフィールド、変更不可
int[] a = {1, 2, 3};
// a.length = 5; // エラー:変更できない
Java- 添字の範囲外(Off-by-oneエラー)
int[] a = {10, 20, 30};
// a[3] は存在しない(最後は a[2])。a[3] は例外(ArrayIndexOutOfBoundsException)
Java回避: for (int i = 0; i < a.length; i++) と書く。<= a.length としない。
- null配列に注意
int[] a = null;
// a.length; // NullPointerException(aが配列を指していない)
Java回避: 配列を使う前に a != null を確認する。
- 多次元配列のlength
int[][] grid = {
{1, 2, 3},
{4, 5}
};
System.out.println(grid.length); // 2(行数)
System.out.println(grid[0].length); // 3(0行目の列数)
System.out.println(grid[1].length); // 2(1行目の列数)
Javaポイント: 行ごとに列数が違う「ジャグ配列」もある。各行の length を個別に確認。
例題で練習
例題1:配列の合計を求める
- ねらい:
forとlengthの基本練習
int[] scores = {70, 85, 90, 60};
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
System.out.println("合計 = " + sum); // 305
Java例題2:最大値を探す(拡張for)
- ねらい: 拡張forの使いどころ
int[] data = {5, 12, 3, 9};
int max = data[0];
for (int v : data) {
if (v > max) max = v;
}
System.out.println("最大値 = " + max); // 12
Java例題3:配列を逆順に表示
- ねらい: インデックスの境界理解
int[] a = {1, 2, 3, 4};
for (int i = a.length - 1; i >= 0; i--) {
System.out.print(a[i] + " "); // 4 3 2 1
}
Java例題4:2次元配列の全要素を表示
- ねらい: 多次元での
lengthの考え方
int[][] grid = {
{1, 2},
{3, 4, 5}
};
for (int i = 0; i < grid.length; i++) { // 行
for (int j = 0; j < grid[i].length; j++) { // その行の列
System.out.print(grid[i][j] + " ");
}
System.out.println();
}
// 出力: 1 2
// 3 4 5
Java小さなチェックリスト
- 基本はこれ:
配列.lengthをループ条件に使う。 - 境界: 最後のインデックスは
length - 1。 - 拡張for: インデックスが不要なときに短く書ける。
- 多次元: 行は
grid.length、列は各行のgrid[i].length。 - null対策: 使う前に
配列 != nullを確認。
さらに一歩:配列とListの違い(触りだけ)
- 固定長: 配列は作成後にサイズ変更不可。
- 可変長:
ArrayListは要素の追加・削除が可能。 - 目安: サイズが変わる可能性があるなら
ArrayList、固定なら配列。
練習課題
- 平均値: 配列の合計を
lengthで割って平均を出す。 - 検索: ある値が配列に含まれているかを探し、見つかったインデックスを表示。
- コピー: 新しい配列を作り、元の全要素を同じ順番で入れる(
forを使う)。 - フィルタ: 偶数だけを数えて表示する。
- 2次元: 3×3の配列を作って、行ごとに合計を出す。
いいですね!では前回提示した練習課題の解答例を、初心者向けに丁寧に書いてみます。
練習課題の解答例
1. 平均値を求める
int[] scores = {70, 85, 90, 60};
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
double average = (double) sum / scores.length;
System.out.println("平均 = " + average); // 平均 = 76.25
Java👉 ポイント: 合計を length で割る。整数同士の割り算にならないように (double) を付ける。
2. 値を検索する
int[] data = {10, 20, 30, 40};
int target = 30;
int foundIndex = -1; // 見つからなかった場合は -1
for (int i = 0; i < data.length; i++) {
if (data[i] == target) {
foundIndex = i;
break; // 見つかったらループ終了
}
}
if (foundIndex != -1) {
System.out.println(target + " は index " + foundIndex + " にあります");
} else {
System.out.println(target + " は見つかりませんでした");
}
Java👉 ポイント: 見つからない場合の処理も用意しておく。
3. 配列をコピーする
int[] original = {1, 2, 3, 4};
int[] copy = new int[original.length];
for (int i = 0; i < original.length; i++) {
copy[i] = original[i];
}
System.out.println("コピー結果:");
for (int v : copy) {
System.out.print(v + " "); // 1 2 3 4
}
Java👉 ポイント: 新しい配列を original.length で作り、要素を順番に代入。
4. 偶数だけを表示する
int[] numbers = {1, 2, 3, 4, 5, 6};
System.out.println("偶数:");
for (int n : numbers) {
if (n % 2 == 0) {
System.out.print(n + " "); // 2 4 6
}
}
Java👉 ポイント: % 演算子で割り算の余りを調べる。n % 2 == 0 が偶数判定。
5. 2次元配列の行ごとの合計
int[][] grid = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < grid.length; i++) {
int rowSum = 0;
for (int j = 0; j < grid[i].length; j++) {
rowSum += grid[i][j];
}
System.out.println("行 " + i + " の合計 = " + rowSum);
}
// 出力:
// 行 0 の合計 = 6
// 行 1 の合計 = 15
// 行 2 の合計 = 24
Java👉 ポイント: grid.length が行数、grid[i].length がその行の列数。
まとめ
- 配列.length を使うと「要素数に依存しない」コードが書ける。
- for文 と組み合わせるのが基本練習。
- 拡張for文 は「インデックス不要」のときに便利。
次のステップとして「配列の中で最大値・最小値を求める」や「配列を並べ替える(ソート)」に挑戦するとさらに理解が深まります。
