我有一个非常基本的问题。
例如:
int a[][] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}
我们说它是 [3][4] 因为它有 3 个元素,每个元素都有自己的 4 个元素。
但是怎么样:
int a[][] = {{1},{5,6,7},{9,10,11,12}}
还是[3][4]?
更新
所以根据下面有用的评论,我的第一个例子可以写成一个 [3][4] 数组,但第二个不能这样表示,对吧?
我有一个非常基本的问题。
例如:
int a[][] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}
我们说它是 [3][4] 因为它有 3 个元素,每个元素都有自己的 4 个元素。
但是怎么样:
int a[][] = {{1},{5,6,7},{9,10,11,12}}
还是[3][4]?
更新
所以根据下面有用的评论,我的第一个例子可以写成一个 [3][4] 数组,但第二个不能这样表示,对吧?
这些被称为Jagged Arrays,它们不被认为是m-by-n,因为它们不符合Matrix的正式定义。
在数学中,矩阵(复数矩阵)是由数字、符号或表达式组成的矩形阵列,按行和列排列。
根据java
多维数组是其组件本身就是数组的数组。这与 C 或 Fortran 中的数组不同。这样做的结果是允许行的长度不同。
拿int a[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
这里不能说 [3][4] 数组,但可以说它有 3 个元素,每个元素都有自己的 4 个元素。
所以在这里你int a[][]={{1},{5,6,7},{9,10,11,12}}
可以说数组有 3 个元素,每个元素有不同数量的元素。
我刚刚在 Android 环境中进行了此测试,这可能适用于这种情况(我认为)
int a[][] = { { 1 }, { 5, 6, 7 }, { 9, 10, 11, 12 } };
for (int i = 0; i < a.length; i++) {
Log.i("", "i: " + i);
for (int j = 0; j < a[i].length; j++) {
Log.i("", "j: " + j);
}
}
我得到的是:
i: 0
j: 0
i: 1
j: 0
j: 1
j: 2
i: 2
j: 0
j: 1
j: 2
j: 3
所以,a
不是 int[3][4]
。
这不是 [3][4]。
它的数组数组,其中外部数组的维数为“3”,而数组元素又是数组,具有不同的长度,即分别为 1、3 和 4。
不它不是。当你这样做时int[][] test = new int[3][4]
,这只是语法糖。双数组没有什么神奇之处。
这两个示例都是数组的数组。您的第一个恰好具有所有这些数组的长度相同,而您的第二个则没有。
作为旁注,绝大多数 java 程序员使用int[][] a
符号,而不是int a[][]
符号。
Java 中没有二维数组。
只存在数组数组,其中每个数组可以有不同的长度。
对于矩阵,请考虑线性内存布局,并使用现有库之一。
请注意,以下内容在 Java 中有效:
int[][] example = new int[2][2];
example[0] = new int[]{1,2,3,4,5,6,7,8,9,10};
而适当的矩阵模块不会允许这种情况发生。
这既是优势,也是劣势。有些应用程序只需要数组数组。并且在某些情况下它更有效(例如仅存储半个三角矩阵)。