Java | 多次元配列の長さを取得する(length フィールド)

Java Java
スポンサーリンク

1. 配列の「長さ」ってなに?

配列の長さは「その配列が何個の要素を持っているか」です。
Javaでは配列の長さを確認するのに .length(フィールド)を使います。

int[] a = new int[4];
System.out.println(a.length); // → 4
Java

a は 4 個の int が入る配列なので a.length4 です。


2. 多次元配列(2次元)でも同じルール

2次元配列は「配列の中に配列がある」構造です。
たとえば int[][] table = new int[3][5]; は外側の配列が 3 個、その中の各配列は 5 個ずつ要素を持ちます。

  • table.length → 外側配列の個数(ここでは 3)
  • table[0].length → 0 番目の内側配列の長さ(ここでは 5)
  • table[1].length → 同様に 5

ポイント:内側の配列ごとに長さが違っても良い(ジャグ配列/可変長配列)。

int[][] jag = new int[2][];
jag[0] = new int[3]; // jag[0] は長さ3
jag[1] = new int[5]; // jag[1] は長さ5

System.out.println(jag.length);     // → 2
System.out.println(jag[0].length);  // → 3
System.out.println(jag[1].length);  // → 5
Java

3. よく使うパターン:全要素にアクセスする(ネストされた for)

多次元配列を扱うときは、外側をループ → 内側をループ が基本です。
.length をループ条件に使えば安全に全要素を処理できます(要素数が変わっても動く)。

int[][] scores = { {87, 54}, {76, 92, 48, 58, 84} };

for (int i = 0; i < scores.length; i++) {            // 外側(行)
    for (int j = 0; j < scores[i].length; j++) {     // 内側(列)※scores[i]の長さを使う
        System.out.println("scores[" + i + "][" + j + "] = " + scores[i][j]);
    }
}
Java

このコードは scores の全要素を順に表示します。内側の長さが違っていても scores[i].length を使うことで安全にループできます。


4. 強化版(便利テク):拡張 for(for-each)による書き方

ネスト for を簡潔に書けます。インデックスが不要で全要素を順に見たいときに便利。

for (int[] row : scores) {
    for (int val : row) {
        System.out.println(val);
    }
}
Java

注意:拡張 for は「インデックスが必要なとき」や「位置を表示したいとき」には向きません。


5. 実用例:2次元配列の合計と平均(サンプル)

public class SumAverage2D {
  public static void main(String[] args) {
    int[][] scores = { {80, 90, 70}, {60, 85}, {100, 95, 90, 80} };
    int total = 0;
    int count = 0;

    for (int i = 0; i < scores.length; i++) {
      for (int j = 0; j < scores[i].length; j++) {
        total += scores[i][j];
        count++;
      }
    }

    double average = (double) total / count;
    System.out.println("合計 = " + total);
    System.out.println("平均 = " + average);
  }
}
Java

出力(例):

合計 = 850
平均 = 85.0

6. よくある初学者のミスと注意点

  1. lengthlength() を混同
    • 配列 → .length(フィールド)
    • 文字列(String) → .length()(メソッド)
      例:array.length は OK、str.length() は OK。array.length() はエラー。
  2. オフバイワン(IndexOutOfBounds)
    ループは i < array.length とする。i <= array.length はダメ(最後に範囲外アクセスになる)。
  3. 内側配列が null の可能性
    int[][] a = new int[3][]; としたとき、a[0] がまだ null だと a[0].length を呼ぶと NullPointerException になります。初期化を確認するか、null チェックを入れてください。
  4. 配列の「サイズ変更」はできない
    一度作った配列の長さは変えられません。要素数を増やしたければ Arrays.copyOfArrayList を使います。

7. 小さなステップアップ例題(コード付き)

例題 A — 各行ごとの最大値を出す

int[][] data = { {3, 7, 2}, {10, 5}, {6, 6, 9, 1} };

for (int i = 0; i < data.length; i++) {
    int max = Integer.MIN_VALUE;
    for (int j = 0; j < data[i].length; j++) {
        if (data[i][j] > max) max = data[i][j];
    }
    System.out.println("row " + i + " max = " + max);
}
Java

例題 B — 3×3 の行列の転置(正方行列のみ)

int[][] m = { {1,2,3}, {4,5,6}, {7,8,9} };
int[][] t = new int[3][3];

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    t[j][i] = m[i][j];
  }
}
Java

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

問題1
int[][] a = { {1,2}, {3,4,5} }; の全要素の合計を求めるコードを書け。
解答例(短)

int[][] a = { {1,2}, {3,4,5} };
int sum = 0;
for (int i = 0; i < a.length; i++) {
  for (int j = 0; j < a[i].length; j++) sum += a[i][j];
}
System.out.println(sum); // 出力 15
Java

問題2
int[][] a = new int[3][]; a[0]=new int[1]; a[1]=new int[2]; a[2]=new int[3];
この配列の a.lengtha[2].length は何?
解答
a.length = 3a[2].length = 3

問題3
3×4 の配列を作り、各要素に行番号+列番号を入れる(例:[i][j] = i*10 + j)コードを書け。
解答例

int[][] t = new int[3][4];
for (int i = 0; i < t.length; i++) {
  for (int j = 0; j < t[i].length; j++) {
    t[i][j] = i * 10 + j;
  }
}
Java

まとめ(初心者向けの一言)

  • 配列の長さは .length で取得する(String と違って括弧はなし)。
  • 多次元配列では 外側も内側も .length を使う。内側は array[i].length
  • ループは .length を使って安全に回す。要素ごとに長さが違うときもこれで対応できる。
  • 内側が null の場合は注意。配列は固定長なので、増やしたいときは別手段(Arrays.copyOfArrayList)。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました