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

Java Java
スポンサーリンク

多次元配列の length をやさしく理解する

配列の「長さ」は、要素がいくつあるかを表します。Javaでは配列に用意されている length フィールドを見るだけでOKです。多次元配列の場合は「外側の配列の長さ」と「内側の配列の長さ」を分けて考えるのがコツです。


基本の考え方

  • 外側の長さ:
    array.length は「外側の配列の要素数(=行の数のイメージ)」です。
  • 内側の長さ:
    array[i].length は「i番目の内側の配列の要素数(=列の数のイメージ)」です。
  • lengthはフィールド:
    length はメソッドではなくフィールドなので () は不要です。array.length と書きます。

まずは1次元配列から

  • 1次元の例:
int[] nums = {10, 20, 30, 40};
System.out.println(nums.length); // 4
Java

ポイント: 要素が4つなので length は4。


2次元配列(表みたいなもの)

  • 固定長の2次元配列:
int[][] table = {
    {1, 2, 3},
    {4, 5, 6}
};

System.out.println(table.length);     // 2 (行数)
System.out.println(table[0].length);  // 3 (1行目の列数)
System.out.println(table[1].length);  // 3 (2行目の列数)
Java
  • 入れ子ループで全部出力:
for (int i = 0; i < table.length; i++) {           // 行を回す
    for (int j = 0; j < table[i].length; j++) {    // その行の列を回す
        System.out.print(table[i][j] + " ");
    }
    System.out.println();
}
Java
  • ポイント:
    • 外側が行数、内側が列数のイメージで、毎回 table[i].length を見ると安全です。
    • 行によって列数が違っても、この書き方ならエラーになりにくいです。

「段違い配列」(行ごとに長さが違う配列)

Javaの2次元配列は「行ごとに列数が違う」形も作れます。これを使うと「1行目は3つ、2行目は5つ」みたいな不揃いのデータも扱えます。

  • 例:
int[][] ragged = new int[3][];  // 行数だけ決める(3行)

ragged[0] = new int[2];         // 1行目は2列
ragged[1] = new int[4];         // 2行目は4列
ragged[2] = new int[1];         // 3行目は1列

System.out.println(ragged.length);      // 3
System.out.println(ragged[0].length);   // 2
System.out.println(ragged[1].length);   // 4
System.out.println(ragged[2].length);   // 1
Java
  • 入れ子ループで安全に処理:
for (int i = 0; i < ragged.length; i++) {
    for (int j = 0; j < ragged[i].length; j++) {
        ragged[i][j] = i + j; // 例:何か代入
    }
}
Java
  • ポイント:
    • 各行の長さは必ず ragged[i].length を見る。固定値で回すとエラーになります。

よくあるつまずきポイント

  • 配列を初期化していない(null参照)
int[][] a = new int[2][];   // 内側はまだnull
// System.out.println(a[0].length); // ← NullPointerException
Java

対策: a[0] = new int[3]; のように、内側の配列を作ってから length を参照します。

  • 列数を外側のlengthで回してしまう
for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a.length; j++) { // ← 誤り。列は a[i].length
        // ...
    }
}
Java
  • メソッド呼び出しと混同
nums.length(); // ← 誤り。lengthはフィールド
nums.length;   // ← 正しい
Java

練習問題と解説

例題1:2次元配列の合計を求める

  • 課題: 行ごとに長さが異なる2次元配列 scores の全要素の合計を計算してください。
  • コード例:
int[][] scores = {
    {80, 90},
    {75, 85, 95},
    {100}
};

int sum = 0;
for (int i = 0; i < scores.length; i++) {
    for (int j = 0; j < scores[i].length; j++) {
        sum += scores[i][j];
    }
}
System.out.println("合計 = " + sum); // 525
Java
  • ポイント: 各行の列数が違うので、列は必ず scores[i].length を使用。

例題2:最も長い行の長さを見つける

  • 課題: 2次元配列 lines の中で、最も要素数が多い行の長さを求めて表示してください。
  • コード例:
int[][] lines = {
    {1, 2, 3},
    {4},
    {5, 6, 7, 8}
};

int maxLen = 0;
for (int i = 0; i < lines.length; i++) {
    if (lines[i].length > maxLen) {
        maxLen = lines[i].length;
    }
}
System.out.println("最長行の長さ = " + maxLen); // 4
Java
  • ポイント: 比較対象は各行の length。外側の lines.length は行数です。

例題3:表形式の表示(列そろえ)

  • 課題: 2次元配列 table を行ごとに表示。短い行は空白で埋めて列を揃えてください。
  • コード例:
int[][] table = {
    {1, 2, 3},
    {4, 5},
    {6, 7, 8, 9}
};

// まず最大列数を求める
int maxCols = 0;
for (int i = 0; i < table.length; i++) {
    if (table[i].length > maxCols) {
        maxCols = table[i].length;
    }
}

// 揃えて表示
for (int i = 0; i < table.length; i++) {
    for (int j = 0; j < maxCols; j++) {
        if (j < table[i].length) {
            System.out.printf("%2d ", table[i][j]);
        } else {
            System.out.printf("   "); // 足りない列は空白
        }
    }
    System.out.println();
}
Java
  • ポイント: 表示用のループは最大列数 maxCols、値参照は各行の length をチェックして安全にアクセス。

まとめ

  • 外側の length は「行数」内側の length は「各行の列数」というイメージで覚える。
  • 段違い配列に強いのがJavaの2次元配列。各行ごとに length を使えば、長さが違っても安全に処理できる。
  • length はフィールド。必ず array.length / array[i].length の形で使う。

もっと練習したい場合は、「合計」「最大」「最小」「平均」「行の並び替え」などを length を活用して作ってみると理解が深まります。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました