如果第一个维度为0长度,是否可以检索二维数组的第二个维度长度?

时间:2012-05-26 15:15:01

标签: java arrays multidimensional-array

嗯,这可能是一个奇怪的问题,也许只是因为我对Java不够熟悉。

所以,我宣布了一个2D int数组:

int[][] arr = new int[0][10]

现在,正如您所看到的,第二个维度的长度为10,而第一个维度的长度为0.我不确定Java如何处理这些类型的数组,但编译器不会产生任何错误,这意味着这是一个合法的声明。

好吧,我把数组传递给了一些函数,我想从函数中检索第二维的长度。 当然是这样的:

arr[0].length

不起作用。还有另外一种方法吗?

3 个答案:

答案 0 :(得分:3)

new int[0][10]new int[0][20]创建的对象是等效的。这里 没有逻辑“第二维”。实际上你正在运行这样的东西:

int[][] createArray(int d1, int d2) {
    int[][] ret = new int[d1][];
    for (int i = 0; i < d1; i++) {
        ret[i] = new int[d2];
    }
    return ret;
}

现在,如果您将其转换为您的方案,您最终会得到从不会读取d2 的代码。

如果要表示通用的矩形数组(而不是数组数组),您可能需要考虑为它创建自己的类型。

答案 1 :(得分:1)

Java中的数组以及大多数其他编程语言都是从零开始的。考虑这个2D数组:

int[][] arr = new int[1][10];

这意味着其中有一行和十列。

现在,考虑一下这个数组:

int[][] arr = new int[0][10];

这意味着其中有零行和(无关的列数)。

如果你试图索引到第二个数组,你会发现你不能 - 长度为零的数组没有起始点。

编译器将其视为有效,因为您使用它声明了维度,但您无法在Java中以任何有意义的方式实际使用它。

答案 2 :(得分:0)

没有第二维的长度。考虑:

int[][] arr = new int[10][10];
arr[5] = new int[42];

第二维的长度是多少? 10或42?

没有。它不会这样工作。 arr是一个包含十个元素的数组,每个元素必须是int数组的引用(或null)。这就是说的全部。