在java中创建数组时可以省略rowsize吗?

时间:2014-03-03 23:32:24

标签: java arrays

在我关于二维数组的说明中,它表示你可以在没有行大小的情况下定义它,但是你需要一个列大小。这是我们教授的错吗?因为我们稍后在相同的注释中说它可以定义一个这样的数组:

int [][] derparray = new int [4][];

好像是反过来了,不是吗?

1 个答案:

答案 0 :(得分:1)

如果查看二维矩阵,“行大小”等于“列数”,“列大小”是“行数”。

做这样的事情:

int [][] derparray = new int [4][5];

分配一个包含4个元素的数组,其中每个元素都是一个包含5个元素的数组。这实际上为您提供了一个包含4行和5列的二维数组。这里,“列大小”是行数,即4;并且“行大小”是列数,即5。

如果你这样做:

int [][] derparray = new int [4][];

4是行数。但是,为每个元素分配 nothing 。每个元素都设置为null,但每个元素可以稍后设置为一维int[]数组。对于所有行,一维数组的大小不必相同。所以在这个例子中,我们可以说因为列大小是行数,所以列大小是4.但是,因为这实际上并没有分配任何“列”,所以它似乎相当奇怪的是谈论一个列大小。所以我会说不,你的教授没有把它倒退,但他所说的是一种相当混乱的方式。

基本上,我会说,除非你像第一个例子那样实际分配矩阵,否则谈论“行大小”或“列大小”并不是一个好主意。这些术语并没有多大意义。

更多:以下在Java中是非法的,因为它没有任何意义:

int [][] derparray = new int [][4];

因为二维数组实际上是一个数组数组。在new int [4][]示例中,这将创建一个包含4行的数组,但数组元素(行)尚未包含任何内容。这很好,因为您可以稍后设置数组元素。但是new int [][4]会做什么?看起来它会创建一个数组,其中每个元素都是一个包含4个整数(列)的数组,但它会在哪里放置每个元素?它无法创建包含所有这些元素的数组,因为您还没有告诉它要创建多少元素。因此,您可以省略“列数”,但不能省略“行数”。我认为这就是你的教授所说的你可以省略行大小而不是列大小,但正如我上面所解释的,这些术语并没有真正意义。