Java本地数组长度

3

我在Java中有一个由double组成的二维数组,它基本上是一个值的表格,我想知道它有多少行...

它在其他地方被声明(并分配内存)如下:

double[][] table;

然后传递给一个函数...
private void doSomething(double[][] table)
{

}

在我的函数中,我希望知道每个维度的长度,而不必将它们作为参数传递。我可以做到列数的长度,但不知道如何做行数的长度...
int cols = table[0].length;
int rows = ?;

如何做到这一点?
我可以只说...
int rows = table.length;

为什么这不会给出行数 x 列数?
6个回答

19

在Java中,2D数组不过是一个数组的数组。

这意味着你可以轻松地像这样获取行数:

int rows = array.length;

这也意味着这种数组中的每一行可以具有不同数量的元素(即每一行可以具有不同数量的列)。
int columnsInFirstRow = array[0].length;

这将仅给出第一行中的列数,但第二行可能比此更多或更少。

您可以指定您的方法仅接受矩形数组,并假设每一行的列数与第一行相同。但在这种情况下,我会将2D数组包装在某个矩阵类中(您可能需要编写该类)。

这种类型的数组称为Jagged Array


2

看一下这个例子。他们使用 .length 来获取行数,[].length 来获取列数。

这是因为数组由“行”指针组成,它们可以指向任何地方,所以你必须对每一列都使用 .length 来获取这些数组的大小。


1

首先,你为什么不测试一下呢?

int rows = table.length;

能够得到期望的结果吗?

确实可以给出第一维中元素的数量。多维数组实际上并没有什么特别之处,因为它们只是数组的数组的数组...在您的情况下 - 一个二维数组 - 它的组织方式如下(伪代码):

double[][] foo = { double[] = {...}, double[] = {...}, ... }

因此,当访问foo时,它指的是“外部”数组,该数组当然具有长度属性,其中包含第二层所包含的数组数量。

您可以将double[][]读作“双重数组([])的双重数组(double[])”。


1

我不太明白你的问题。你必须意识到,在Java中,多维数组实际上是数组的数组。

table.length 实际上会给出你的二维数组中包含的一维数组的数量(假设没有空条目)。

table[0].length 将给出第一个一维条目的大小。这可能与其他条目的大小不同,并且它可能会抛出 NullPointerException(尽管在分配为 new double[rows][cols] 时两者都不可能发生)。


0

不会的,你可以直接使用table.length


0

或者,您可以将2D数组包装成某种矩阵或网格类。在内部,您可以将其表示为1D数组,并计算行/列坐标的偏移量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接