假设
double[][][] x = new double[4][5][6]
,为什么x.length, x[2].length
和x[0][0].length
分别为4,5和6?为什么[0][0].length
是6?
答案 0 :(得分:5)
要想象一个三维数组,并理解它的长度,你可以用文字的物理维度来思考它(还记得书Flat Land吗?)。
一个对象:
.
一组对象:
.............
此数组的长度(array.length
)是从左到右计算的元素或点的数量。
二维对象数组:
.............
.............
.............
.............
.............
.............
上一个数组中的每个元素现在都有自己的数组,向下。此数组中第一个元素的长度(array[0].length
,最左上角)是从上到下计算点。
三维数组就像一个立方体(这是假设元素之间的长度均匀)
.............
............. .
............. . .
............. . . .
............. . . .
............. . . .
. . . . . . . . .
. . . . . . . ..
. . . . . . . .
上一个数组中的每个元素现在都有其自己的数组(将深“输入”屏幕“)。 此 数组中的第一个元素的长度(array[0][0].length
,最左上角的元素)是深度点数。
我没有(直接)使用三维数组。
答案 1 :(得分:1)
使用new double[4][5][6]
所拥有的是20个长度为6的数组。它们可以寻址:
x[0][0] // array of length 6
x[0][1] // another array of length 6 here
x[0][2] // etc...
x[0][3]
x[0][4]
x[1][0]
x[1][1]
x[1][2]
x[1][3]
x[1][4]
x[2][0]
x[2][1]
x[2][2]
x[2][3]
x[2][4]
x[3][0]
x[3][1]
x[3][2]
x[3][3]
x[3][4]
答案 2 :(得分:1)
当你声明一个像double [] x = new double [5]这样的数组时,你说你想要一个5长的double数组,即
(type) x = new (type)[size];
所以当你声明double [] [] [] x = new double [4] [5] [6]时,你说你想要一个6长的double [] []数组:
(double[][])[] x = new (double[4][5])[6];
答案 3 :(得分:0)
使用多维数组时,将它们视为“数组数组”很有用。也就是说,double[]
是doubles
的数组,double[][]
是double[]
的数组,double[][][]
是由数组的数组组成的数组双打。那么让我们分解你的例子:
double[][][] x = new double[4][5][6];
向后工作,我们可以将其视为由double[][]
的6个数组组成的数组,每个数组包含5个double[]
数组。每个阵列包含4个双打。困惑了吗?
另一件可能有助于看到这种关系的方法是使用括号来写这个:
(((double[])[])[])
现在,当您访问x[2]
时,实际上是在2
的索引x
检索一个数组数组,该数组的长度为5。
当您访问x[0][0]
时,这仍然只是另一个数组(请记住,我们将数组构建为数组数组),您在new
中声明了这个数组声明长度为6
。也就是说,x[0][0]
不会包含数字,但会包含double[][]
类型的数组,其长度为6
。