数组长度无法按预期工作

时间:2014-01-23 12:59:52

标签: java arrays

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不能被解除引用”。我在这里缺少什么?

3 个答案:

答案 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的数组。