public static void main(String[] args) {
int i[][][] = new int[3][2][1];
System.out.println(i[0].length + " " + i[0][0].length);
}
上面的程序似乎应该打印“3 2”。相反,它打印“2 1”。所以似乎[0]指的是“第二维”而不是第一维。为什么?如何做我指的是第一个维度?
i [0] [0] [0] .length根本不起作用,但给出“int不能被解除引用”。我在这里缺少什么?
答案 0 :(得分:2)
第一个维度是i
。让我们分开吧:
int i[][][] = new int[3][2][1];
int j[][] = i[0]
int k[] = j[0] // or i[0][0]
int l = k[0] // or j[0][0] or i[0][0][0]
// the following prints 3 2 1
System.out.println(i.length + " " + i[0].length + " " + i[0][0].length);
您在评论中说anArray[0]
是第一个元素。这是正确的。三维数组的第一个元素是二维数组,在您的情况下,长度为2。
如果你用另一种方式写它可能会更清楚(无论如何你的被认为是非常规的):
int[][][] i = new int[3][2][1];
这表明i
指向三维int数组。如果你想要那个数组的长度(或者更好地说它是第一个维度),你必须通过i
得到它。
答案 1 :(得分:2)
i
是3维数组,因此i.length
给出第一个大小。
i[0]
是二维数组中的第一个,因此i[0].length
给出第二个大小。
i[0][0]
是1维数组中的第一个,因此i[0][0].length
给出第三个大小。
i[0][0][0]
是一个int,因此无法对其进行.length
。
答案 2 :(得分:1)
在Java中这有点不自然。
直观地说,我会解释这个:
new int[x][y][z]
as as:
new ((int[x])[y])[z] // (Array of int[][]) with length z
但不是真的。这是奇怪的部分。它实际上是:
new int[x]([y]([z])) // (Array of int[][]) with length x
这意味着这是一个长度为x
的数组。该数组包含所有大小为y
的数组,以及这些数组,包含大小为z
的数组。