【发布时间】:2014-11-11 08:00:33
【问题描述】:
T 是一个类型,无论是基元还是类,T 的数组是T[]。变量被声明为T[] a; 并构造为new T[n]。使用T t,您可以使用a[i]=t 或t=a[i]。
我的问题是 T 是 int[]。对于int[][] a,a[i] 指的是a 中的int[] 数组之一,而a[i][j] 指的是同一int[] 数组中的一个元素,所以这里可以类比。
但是构造a应该是,通过上面的类比,a = new int[][n];(将T替换为int[],此刻不担心a[i]未定义或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" } } };)。
【问题讨论】:
-
你必须高亮代码。请参阅How do I format my posts using Markdown or HTML?。
-
第一个维度是 m 大小,第二个维度是 n 大小,为什么在你看来是相反的??
-
@yurib 因为你把维度放在方括号之后数组元素的类型。就像
String [7]表示7 个String元素的数组一样,int[3] [7]应该表示7 个int[3]元素的数组。int[] [7]类似。 -
@Joiner 谢谢。我应该在发布之前完成我的作业。我实际上是要查找并编辑我的帖子,但 parakmiakos 已经为我完成了,所以也谢谢你。 (不过,我不知道为什么我需要声誉来审核我自己的帖子的建议编辑。)
标签: java arrays multidimensional-array