在我关于二维数组的笔记中,它说你可以在没有行大小的情况下定义它,但是你需要一个列大小。这是我们教授的错误吗?因为我们之后,在相同的音符,它说,你可以这样定义一个数组:在java中创建数组时可以省略rowsize吗?
int [][] derparray = new int [4][];
看起来这将是周围的其他方式,不是吗?
在我关于二维数组的笔记中,它说你可以在没有行大小的情况下定义它,但是你需要一个列大小。这是我们教授的错误吗?因为我们之后,在相同的音符,它说,你可以这样定义一个数组:在java中创建数组时可以省略rowsize吗?
int [][] derparray = new int [4][];
看起来这将是周围的其他方式,不是吗?
如果看一下二维矩阵,“行大小”等于“列数”,“列大小”是“行数”。
做这样的事情:
int [][] derparray = new int [4][5];
分配4个元素,其中每个元素是包含5个元素的数组的数组。这实际上为您提供了一个4行5列的2维数组。这里,“列大小”是行数,它是4;和“行大小”是列数,这是5
如果你这样做:
int [][] derparray = new int [4][];
4的行数。但是,没有为每个元素分配。每个元素设置为null
,但每个元素可稍后设置为一维int[]
阵列。一维数组对于所有行不必是相同的大小。所以在这个例子中,我们可能说,因为列大小是行数,所以列大小是4.但是,因为这实际上并没有分配任何“列”,所以谈论一个列大小。所以我会说不,你的教授没有把它倒退,但是他说的话是以相当混乱的方式。
基本上,我会说,除非你像第一个例子那样实际分配矩阵,否则谈论“行大小”或“列大小”并不是一个好主意。这些条款并不真正有意义。
更多:以下是在Java中非法的,因为它没有任何意义:
int [][] derparray = new int [][4];
因为2 d阵列,真是一个数组的数组。在new int [4][]
示例中,这将创建一个包含4行的数组,但数组元素(行)还不包含任何内容。这很好,因为您可以稍后设置数组元素。但是new int [][4]
会做什么?它似乎会创建一个数组,其中每个元素是一个由4个整数组成的数组(列),但是它会在哪里放置每个元素?它不能创建包含所有这些元素的数组,因为您没有告诉它需要创建多少个元素。因此,可以省略“列数”,但不能省略“行数”。我认为这就是你的教授所说的可以省略行大小而不是列大小的意思,但正如我在上面解释的那样,这些术语没有意义。
所以你可以这样做:'int [] [] derparray = new int [] [4];' – munchschair
@munchschair不,这是违法的。看我的编辑。规则(如果你没有初始聚合)是你可以有一个或多个具有实际数量的'[n]',后面跟零个或多个'[]',方括号之间没有任何东西。但是你不能有一个'[]'后面跟着一个'[n]'。 – ajb
所以初始括号是一个数组,它后面的括号是该数组的数组。这就是为什么你不能有一个没有初始数组的数组。我有权利吗? – munchschair
哪些是“行”,哪些是“列”,是每个维度代表的任意选择。重点是,您需要定义除最后一个维度之外的所有维度的大小。 –
@PhilippeSignoret不正确。 'int [] [] [] a = new int [4] [] []'是合法的。 – ajb