Java本机数组长度

时间:2009-02-25 11:02:41

标签: java arrays

我在Java中有一个二维2D数组,它基本上是一个值表,我想知道它有多少行......

它在其他地方(和分配)声明如下:

double[][] table;

然后传递给一个函数......

private void doSomething(double[][] table)
{

}

在我的函数中,我想知道每个维度的长度,而不必将它们作为参数传递。我可以为列数做这个,但不知道如何为行...

int cols = table[0].length;
int rows = ?;

我该怎么做?

我可以说......

int rows = table.length;

为什么不给行x cols?

6 个答案:

答案 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数组并计算行/列坐标的偏移量。