for循环中的Java三维数组

时间:2017-07-30 09:26:58

标签: java arrays for-loop

m1方法有3-d数组作为参数,打印b(对象引用)给出CommentLine,这意味着a是3-d数组,但是for for循环(粗体)a表现为2-d数组,如果我把它写成int x [] [] []:a那么它是

[[[I@15db9742

这种行为的原因是什么?

giving error " Type mismatch: cannot convert from element type int[][] to 
     int[][][]"

3 个答案:

答案 0 :(得分:1)

Java中没有“3D数组”这样的东西。对于以前的C / C ++程序员来说它是false friend,它看起来是一样的,但却完全不同。

Java中的数组始终是2D。它甚至没有“尺寸”,实际上每个“行”可以包含不同数量的“列”。

请研究Oracle tutorial on arrays

您的阵列实际上可能如下所示:

  • 黄色:首先是“尺寸”,包含参考int[][]
  • blue:第二个“维度”,包含引用int[]
  • 绿色:第三个“维度”,直接包含int数字

enter image description here

答案 1 :(得分:1)

你的for循环不正确。你正在做的是迭代b数组int[][][](你称之为3D数组)以获得下一个较低层int[][]

但是你使用的System.out.println(b);使用的不是int[][],而是传递给你的方法的int[][][],基本上从未使用过for循环。

这可以胜任:

public static void m1(int[][][] b)
{
    for(int[][] x : b)
       System.out.println(x);

}

结果:

  

[[I @ 15db9742
  [[I @ 6d06d69c

答案 2 :(得分:0)

我认为你误解了enhanced for loop语法。

您不必重新声明数组变量本身,而是显式声明迭代期望的元素类型。

int[] array;
for (      String             element       :     array)
//     element type  ||  element variable  ||  array variable

请注意String[] vs String

  • String[] array声明您正在迭代的数组变量。
  • String element声明您期望的元素类型。您也可以声明Object element,因为StringObject的子类。

现在,正如在其他问题中已经详细阐述的那样,java中实际上并不存在'3-d数组',但它只是数组数组的数组 - 换句话说是'2-d数组'的数组

这就是您提供的示例中需要以下语法的原因:

int[][][] array;
for (int[][] element : array)