嗯,这可能是一个奇怪的问题,也许只是因为我对Java不够熟悉。
所以,我宣布了一个2D int数组:
int[][] arr = new int[0][10]
现在,正如您所看到的,第二个维度的长度为10,而第一个维度的长度为0.我不确定Java如何处理这些类型的数组,但编译器不会产生任何错误,这意味着这是一个合法的声明。
好吧,我把数组传递给了一些函数,我想从函数中检索第二维的长度。 当然是这样的:
arr[0].length
不起作用。还有另外一种方法吗?
答案 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)。这就是说的全部。