HOWTO · Java

如何在 Java 中獲取一個二維陣列的長度

文章介紹了 Java 中獲取二維陣列長度的方法。

本頁內容

對於名為 arr 的 Java 二維陣列,arr.length 會傳回列數。若陣列是矩形陣列,且外層陣列至少有一列,arr[0].length 會傳回每列的欄數。Java 將二維陣列表示為由多個獨立列陣列組成的陣列,因此鋸齒陣列的各列長度可能不同。

Java 二維陣列如何儲存列與欄

像 int[][] values 這樣的宣告,表示外層陣列包含多個 int[] 列。外層陣列的 length 計算的是列參考的數量,而不是格子中的所有整數。每一列都有自己的 length。所有列長度都相同的陣列稱為矩形陣列;各列長度可以不同的陣列則是鋸齒陣列。

length 是每個 Java 陣列都有的欄位,不是方法。請寫成 values.length,後面不加括號。若要查看特定列,請使用 values[rowIndex].length。

取得矩形二維陣列的維度

使用外層陣列的 length 取得列數。如果陣列至少有一列,而且每列大小都相同,第一列的 length 就是欄數。以下完整範例會印出這兩個維度:

執行此範例:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

class Main {
    public static void main(String[] args) {
        int[][] scores = {
            {8, 7, 9},
            {6, 5, 8}
        };

        int rows = scores.length;
        int columns = scores[0].length;
        System.out.println("Rows: " + rows);
        System.out.println("Columns: " + columns);
    }
}

輸出顯示兩列三欄,與 scores 的維度相符:

Rows: 2
Columns: 3

取得鋸齒陣列中每一列的長度

鋸齒陣列沒有單一的欄數。你可以選取一列來取得它的長度,也可以逐列走訪外層陣列,查看每一列。迴圈條件使用 rows.length,而 rows[i].length 則會傳回目前列的大小:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

class Main {
    public static void main(String[] args) {
        int[][] rows = {
            {4, 2},
            {7, 1, 3},
            {9}
        };

        System.out.println("Rows: " + rows.length);
        for (int i = 0; i < rows.length; i++) {
            System.out.println("Row " + i + " length: " + rows[i].length);
        }
    }
}

輸出會列出每一列的長度;如果只需要查看其中一列,可以使用 rows[1].length 這類運算式:

Rows: 3
Row 0 length: 2
Row 1 length: 3
Row 2 length: 1

安全處理空列或 null 列

讀取 arr[0].length 之前,請先確認外層陣列至少有一列。以 new int[0][] 建立的陣列沒有第一列,因此使用索引 0 前要先檢查 arr.length > 0。若要存取指定列,請先確認 rowIndex >= 0 && rowIndex < arr.length;Java 陣列索引從零開始,最後一個有效索引是 arr.length 減一。接著,讀取該列的長度前,請確認 arr[rowIndex] 不是 null,因為取用 null 列會造成 NullPointerException。已存在但沒有任何元素的列則不同:它的長度為 0,可以安全讀取。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

class Main {
    public static void main(String[] args) {
        int[][] arr = { {1, 2}, null, {} };

        System.out.println("Rows: " + arr.length);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == null) {
                System.out.println("Row " + i + " is null");
            } else {
                System.out.println("Row " + i + " length: " + arr[i].length);
            }
        }
    }
}

此範例的輸出如下:

Rows: 3
Row 0 length: 2
Row 1 is null
Row 2 length: 0

程式不會取用 null 列,而是先辨識出它;已配置但沒有元素的列,其長度則為零。如果外層陣列本身也可能是 null,請先檢查 arr != null,再讀取 arr.length。