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[][][]"
答案 0 :(得分:1)
Java中没有“3D数组”这样的东西。对于以前的C / C ++程序员来说它是false friend,它看起来是一样的,但却完全不同。
Java中的数组始终是2D。它甚至没有“尺寸”,实际上每个“行”可以包含不同数量的“列”。
您的阵列实际上可能如下所示:
int[][]
int[]
int
数字答案 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
,因为String
是Object
的子类。现在,正如在其他问题中已经详细阐述的那样,java中实际上并不存在'3-d数组',但它只是数组数组的数组 - 换句话说是'2-d数组'的数组
这就是您提供的示例中需要以下语法的原因:
int[][][] array;
for (int[][] element : array)