2017-07-30 96 views
2

m1方法具有三维数组作为参数,同时打印b(对象引用)给出[[[[email protected]这意味着a是三维数组,但在for循环(粗体)中a表现为2 -d阵列,若设为i写为INT X [] [] []:一个那么它是Java中的三维数组for循环

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

什么是此行为的原因吗?

public class Arr { 

    public static void main(String[] args) { 

     int[][][] aa2=new int[2][1][]; 

     m1(aa2); 
    } 

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

    } 
} 
+3

甲3D阵列有效地是二维数组的数组。因此,当你想迭代一个,那就是你会得到的。 –

+0

在哪条线上有错误 – Nathan

+0

如果要打印循环中使用的2D数组,只需将输出更改为'System.out.println(x)'。 – user3734782

回答

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

+0

谢谢你的答案,但我的问题是,B是一个3D数组,但在for循环中,我必须声明X为2 D数组,如果我将X声明为3 D数组,那么它给出错误, 请忽略system.out。 println –

+0

@bharatbhushan当然它会给你一个错误。您正在遍历一个由inint(3d Array)组成的数组的Array的数组,因此您在for循环中得到的是一个ints数组的Array(2d Array) –

1

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

Java中的数组始终是2D。它甚至没有“维度”,实际上每个“行”可以包含不同数量的“列”。请致电Oracle tutorial on arrays

你其实阵列可能是这样的:

  • 黄:第一 “维”,包含引用int[][]
  • 蓝色:第二 “维”,包含引用int[]
  • 绿色:第三个“尺寸”,直接包含int数字

enter image description here

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的子类。

现在,在其它问题如已经阐述的,一个“3-d阵列”实际上并不存在在Java中,但它仅仅是数组的数组的数组 - 或者换言之的阵列'二维数组'。

这就是为什么在你提供的示例中,需要的语法如下:

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