3 回答

TA貢獻1871條經驗 獲得超13個贊
表達式 likenew int[2][5]將創建一個長度為 2 的外部數組,每個元素引用一個長度為 5 的數組,因此總共創建了 3 個數組。這在 Java 語言規范示例 15.10.2-2 中有詳細記錄。多維數組創建:
聲明:
float[][] matrix = new float[3][3];
在行為上等同于:
float[][] matrix = new float[3][];
for (int d = 0; d < matrix.length; d++)
matrix[d] = new float[3];
這并不意味著(int[2])[5],即 5 個引用數組的數組 2。
因此,查找值的表達式從左到右求值,例如x[2][5]mean (x[2])[5],即在int[][] x變量 lookup 中x[2],它是 an int[],在該數組查找值中的 index 5。
int[][] x = new int[9][9];
// z = x[2][5]
int[] y = x[2];
int z = y[5];

TA貢獻1828條經驗 獲得超6個贊
這樣做的原因是數組訪問的重要性。您有一組數組 ( int[][])。然后從中檢索一個數組 ( int[])。然后從那個 ( int) 中檢索一個元素。
有兩種方法可以做到這一點。第一個是最重要的:
for (int i = 0; i < matrix.length; i++) {
int[] row = matrix[i];
for int j = 0; j < row.length; j++) {
int element = row[j];
}
}
必須int[] row = matrix[][i];在第一個示例中使用是荒謬的,因為約定是array[i]代表 的第一個元素array。在這種情況下,的第一個元素array是一行,而不是一個元素。
始終一致地應用相同的索引排序。
這也符合這樣一個事實,即您可以使用Object[]數組擁有一個奇怪維度的類矩陣對象。也許該數組的一個元素將是int[][][]while 下一個將是int[]。必須以某種方式弄清楚是否放置array[][][][i]或array[][i]當您不知道子數組的維數i并且子數組甚至不一定具有一致的維數時,這會有點奇怪。

TA貢獻1799條經驗 獲得超8個贊
您可能會將 Java 中的二維數組視為數組的數組。考慮以下一般二維數字數組:
1 2 3
4 5 6
7 8 9
我們可以將這個數組定義為:
int[][] array = new int[][] {{1,2,3}, {4,5,6}, {7,8,9}};
或者,我們可以使用一個空的構造函數,然后填充各個值:
int[][] array = new int[3][3];
array[0][0] = 1;
array[0][1] = 2;
// etc.
但是為了更好地理解 Java 中的 2D 數組是如何工作的,請考慮以下方法:
int[][] array = new int[3][];
arr[0] = new int[] {1, 2, 3};
arr[1] = new int[] {4, 5, 6};
arr[2] = new int[] {7, 8, 9};
希望很清楚二維數組實際上是什么;它是一個數組數組,因此我們可以將其可視化為:
[ ] -> [1, 2, 3]
[ ] -> [4, 5, 6]
[ ] -> [7, 8, 9]
也就是說,數組的第一個索引中的每個元素,大小為 3,對應于行,指向另一個 1D 數組,對應于列。請注意,在 Java 中,二維數組可以是jagged,這意味著我們也可以這樣做:
int[][] array = new int[3][];
arr[0] = new int[] {1, 2, 3, 4, 5};
arr[1] = new int[] {1, 2, 3};
arr[2] = new int[] {7, 7, 7};
為了解決@Henry 在下面的評論中提出的問題,上面二維數組最左邊部分的大小為 3,這與我們在繪制時看到的一致。即,我們看到一個具有 3 個桶的一維數組,每個桶都指向另一個具有某種大小的一維數組。
添加回答
舉報