2017-07-30 127 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)