用Java构造一个数组数组,错误的维度顺序?

时间:2014-11-11 08:00:34

标签: java arrays multidimensional-array

T是一个类型(基元或类),T的数组是T[]。变量声明为T[] a;并构造为new T[n]。使用T t,您可以a[i]=tt=a[i]

我的问题是Tint[]。使用int[][] aa[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.lengtha[0].length,这证实了我的怀疑。

因此,当您构造一个数组数组时,为什么必须以相反的顺序给出长度?这取决于Java实现,还是这个错误的顺序是通用的?

我已经检查了http://www.javaworld.com/article/2077367/learn-java/array-of-arrays.html,但它没有澄清它;它还包含错误(String [][] saa = { { { "Help" } } };)。

1 个答案:

答案 0 :(得分:0)

来自java language specification

  

数组类型被写为元素类型的名称,后跟一些空方括号[]对。括号对的数量表示数组嵌套的深度。

因为你从左到右阅读,你应该将最左边的一对括号视为嵌套的顶层 这意味着int[m][n]是一个n长度整数数组,嵌套在m长度数组中,而不是另一种方式。