我一直在谷歌上搜索从三维数组中学习的教程,但似乎所有的教程都是二维数组。所以我需要一些解释来理解三维阵列的发展。
我非常了解二维数组,但我发现很难理解3和4等维数组。我知道二维数组代表行和列但是这个三维数组呢:
我对下面代码的理解是应该有3行和4列,但最后一个位置的5使它看起来不同。我需要帮助来理解为什么有12行和5列。如果你能帮助我理解4或5-D阵列
感谢。
class ThreeDMatrix
{
public static void main(String[] args)
{
int threeD[][][] = new int[3][4][5];
int i,j,k;
for (i=0; i<3; i++)
for(j=0; j<4; j++)
for (k=0; k<5; k++)
threeD[i][j][k]= i*j*k;
{
for(i=0; i<3; i++)
for(j=0; j<4; j++){
for (k=0; k<5; k++ )
{
System.out.print("-" + threeD[i][j][k]);
}
System.out.println();
}
System.out.println();
}
}
}
输出:
-0-0-0-0-0
-0-0-0-0-0
-0-0-0-0-0
-0-0-0-0-0
-0-0-0-0-0
-0-1-2-3-4
-0-2-4-6-8
-0-3-6-9-12
-0-0-0-0-0
-0-2-4-6-8
-0-4-8-12-16
-0-6-12-18-24
请抱歉代码的渲染效果不佳。我真的不知道如何正确使用代码标签。如果有人会告诉我,那么我将重新发布。感谢
答案 0 :(得分:5)
你可以看到你的三维数组是4个5x元素的3维二维数组,或者是5个元素的12个一维数组。
这就是你输出中有12行的原因。
将此数组视为int[12][5]
,其中第一个索引依赖于两个不同的索引。这个东西也适用于n维数组。这只是指数问题..
如果你真的需要帮助想象它,你应该首先考虑一个二维数组,在你的例子中是一个4x5数组..所以你有类似的东西
00 01 02 03 04
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
当您添加第三个维度时,就像有多个矩阵相互保持一样..
所以,如果你有int[2][4][5]
,那么
first index == 0
00 01 02 03 04
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
和另一个
first index == 1
00 01 02 03 04
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
也许这张照片可以澄清:
alt text http://i.msdn.microsoft.com/02e7z943.ArrayExDimThree%28en-us,VS.90%29.gif
从“solid”中提取的每张图表都代表一个2D数组,因为您可以看到每张图表都有相同的第一个索引(第一个为0
,第二个为1
,依此类推)。因此,通过指定第一个索引,您可以选择矩阵,然后可以使用其他两个索引选择精确元素。
当然你可以将它扩展到任何维度,但是向你显示代表数组的超固体将会更加困难。
答案 1 :(得分:1)
int foo[][][]
声明int
数组的数组数组。每个新的“维度”只意味着“拿走我拥有的任何东西,并为我提供一系列”。你是否称它们为“行”,“列”或其他任何东西完全取决于你。
在您的示例中,您会看到12行,因为嵌套循环的效果是您调用12次System.out.println()
。 12个换行符表示12行。这与数组的结构无关,只与打印数据的方式有关。
答案 2 :(得分:0)
:-) 有三组四个子组,每组有5个整数。打印输出中的每一行都是一个5整数的子组。连续四行组成一组。如果在第二个System.out.println中添加“ - ”,则打印输出将更容易阅读