我在Java中有一个二维2D数组,它基本上是一个值表,我想知道它有多少行......
它在其他地方(和分配)声明如下:
double[][] table;
然后传递给一个函数......
private void doSomething(double[][] table)
{
}
在我的函数中,我想知道每个维度的长度,而不必将它们作为参数传递。我可以为列数做这个,但不知道如何为行...
int cols = table[0].length;
int rows = ?;
我该怎么做?
我可以说......
int rows = table.length;
为什么不给行x cols?
答案 0 :(得分:18)
在Java中,2D数组只不过是一个数组数组。
这意味着您可以轻松获得如下行数:
int rows = array.length;
这也意味着这样的数组中的每一行都有不同数量的元素(即每行可以有不同数量的列)。
int columnsInFirstRow = array[0].length;
这只会为您提供第一行中的列数,但第二行可能会有更多或更少的列。
您可以指定您的方法仅采用矩形数组,假设每行的列数与第一行相同。但在这种情况下,我会将2D数组包装在某些Matrix类中(您可能需要编写)。
这种数组称为Jagged Array。
答案 1 :(得分:2)
看at this example。他们使用.length来获取行数,[]。length来获取列数。
这是因为数组由“行”指针组成,这些指针可以在任何地方引导,所以你必须为每列使用.length来获得这些数组的大小。
答案 2 :(得分:1)
我不太明白你的问题。您必须意识到,在Java中,多维数组实际上是数组的数组。
table.length
实际上会为您提供二维数组中包含的一维数组的数量(假设没有空条目)。
table[0].length
将为您提供第一个一维条目的大小。这可能与其他人的大小不同,并且可能抛出NullPointerException(尽管当它被分配为new double[rows][cols]
时都不可能)。
答案 3 :(得分:1)
嗯,首先,你为什么不测试是否
int rows = table.length;
给出了期望的结果?
它确实为您提供了第一维中元素的数量。多维数组实际上并不特别,因为它们只是数组的数组...在你的情况下 - 一个二维数组 - 它的组织方式如下(伪代码):
double[][] foo = { double[] = {...}, double[] = {...}, ... }
因此,当访问foo时,它引用的是“外部”数组,它当然具有length属性,其中包含它在第二级包含的数组的数量。
你可以将double [] []读作“双数组的数组([])(double [])”。
答案 4 :(得分:0)
不,不会。你可以使用table.length
答案 5 :(得分:0)
或者,您可以将2d数组包装到某种Matrix或Grid类中。在内部,您可以将其表示为1d数组并计算行/列坐标的偏移量。