T
是一个类型(基元或类),T
的数组是T[]
。变量声明为T[] a;
并构造为new T[n]
。使用T t
,您可以a[i]=t
或t=a[i]
。
我的问题是T
是int[]
。使用int[][] a
,a[i]
引用int[]
和a
中的a[i][j]
个数组之一指向同一int[]
数组中的元素,因此类比这里很好。
但是,通过上面的类比,构建a
应该是a = new int[][n];
(将T
替换为int[]
,此刻并不担心a[i]
是undefined或null
,我可以稍后分配/构建它们。
但是,这会产生以下错误:
无法在空维度
后指定数组维度
但new int[n][]
不会产生错误。
此外a = new int[m][n];
还可以,显而易见的是,它构造了数组a
及其每个元素,所有这些元素都是具有相同长度的数组。但根据类比,a
的长度应为n
,每个a[i]
的长度应为m
。但是前一段让我怀疑它是相反的,所以我尝试int[][] a = new int[3][7];
并显示a.length
和a[0].length
,这证实了我的怀疑。
因此,当您构造一个数组数组时,为什么必须以相反的顺序给出长度?这取决于Java实现,还是这个错误的顺序是通用的?
我已经检查了http://www.javaworld.com/article/2077367/learn-java/array-of-arrays.html,但它没有澄清它;它还包含错误(String [][] saa = { { { "Help" } } };
)。
答案 0 :(得分:0)
数组类型被写为元素类型的名称,后跟一些空方括号[]对。括号对的数量表示数组嵌套的深度。
因为你从左到右阅读,你应该将最左边的一对括号视为嵌套的顶层
这意味着int[m][n]
是一个n
长度整数数组,嵌套在m
长度数组中,而不是另一种方式。