java - 在Java中构造数组的数组,维数顺序错误?

标签 java arrays multidimensional-array

T是一种类型,可以是基元或类,是 T 的数组是 T[] 。变量声明为 T[] a;并构造为 new T[n] 。与T t然后你可以做a[i]=tt=a[i] .

我的问题是 Tint[] 。与int[][] a a[i]int[] 之一a 内的数组和a[i][j]到同一个 int[] 中的元素数组,所以这个类比在这里很好。

但是构建 a按照上面的类比,应该是 a = new int[][n]; (将 T 替换为 int[] ,目前不担心 a[i] 未定义或 null ,我可以稍后分配/构造它们)。 但是,这会产生以下错误:

Cannot specify an array dimension after an empty dimension

但是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" } } }; )。

最佳答案

来自 java language specification

An array type is written as the name of an element type followed by some number of empty pairs of square brackets []. The number of bracket pairs indicates the depth of array nesting.

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

关于java - 在Java中构造数组的数组,维数顺序错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26860190/

相关文章:

java - jpa 实体 bean 的默认范围是什么?它有何帮助?

c - 指定在 char 数组 c 中开始 strlen() 的位置

Swift 3d 数组创建

java - 哈希集二维数组

java - 如何为在 JTextPane 上的单独 JFrame 上打开的文件设置 UTF-8 编码

java - 如何在Java中使用正则表达式提取HTML <td>标签数据?

c - 如果函数正在运行,如何从数组中取出该函数?

c# - 基于选择蒙版的切片数组

c - 二维矩阵的值未分配正确

java - 抑制某些类别中的 PMD 违规