无法理解3D阵列

时间:2014-03-27 21:17:35

标签: java arrays

假设 double[][][] x = new double[4][5][6],为什么x.length, x[2].lengthx[0][0].length分别为4,5和6?为什么[0][0].length是6?

4 个答案:

答案 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