【问题标题】:Constructing an array of arrays in Java, wrong order of dimensions?用Java构造数组数组,维度顺序错误?
【发布时间】:2014-11-11 08:00:33
【问题描述】:

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

我的问题是 Tint[]。对于int[][] aa[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.lengtha[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


【解决方案1】:

来自java language specification

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

由于您从左到右阅读它,因此您应该将最左边的一对括号视为嵌套的顶层。
这意味着int[m][n] 是嵌套在m 长度数组中的n 长度整数数组,而不是相反。

【讨论】:

  • 我理解您关于尺寸排序的论点。但这对我来说没有意义,从数学上看。但是,我可以接受这是规则的一个例外:用例如构造一个数组7 of something,你把 [7] 放在后面。当然,如果 "something" 是一个数组:7 of int[3] 你通过 inserting [7]: int[7][3] 构造而不是放在后面。
  • 你从错误的方向看它。推理是这样的:您正在构造一个由 7 个数组组成的数组。这些数组中的每一个都有一个由 3 个整数组成的子数组。因此,这是完全合乎逻辑的。
  • @CarstenHoffmann 你从外面开始。构建数组时,从内部开始。在int[] 的情况下,您首先放置最里面的类型int,然后然后 放置括号。使用多维数组,您可以从最外层开始维度。为了保持一致,上述数组(7 个三元组)应该从内部开始:int[3][7] 或从外部开始:[7][3]intint 是最里面的部分,因此在最后)。相反,Java 中的正确方法是使用双向int[7][3]。只有我这么看吗?
  • P.S.我知道现在更改 Java 语法的那部分会弄乱大量预先存在的 Java 代码,因此没有任何意义。不用担心,我已经接受了 Java 语法的这一部分,但是,与许多人不同,我认为它是规则的例外,不一致,但现在已明确定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 2017-08-27
  • 2013-02-25
  • 1970-01-01
相关资源
最近更新 更多