2010-10-23 83 views
0

如果我有一個2D數組,arr[][],並且讓我這麼做:arr[0]=10;這是幹什麼的?我只在第一維中分配了10個,但我沒有提到第二維。在這種情況下會發生什麼?Java 2D數組問題

編輯:好什麼樣:

public static int[][] mystery(int[][] srcA, int[][] srcB) { 

    2 int width= srcA.length, height = srcA[0].length; 
    3 int[][] output = new int[width][height]; 
    4 for (int x = 0; x < width; x++) { 
    5 if(x%2 ==0) output[x] = srcA[x]; 
    6 else output[x] = srcB[x]; 
    7 } 
    8 return output; 
    9 } 
+2

編譯錯誤,就是這樣。 – 2010-10-23 17:18:54

+0

確定請參閱編輯請 – Snowman 2010-10-23 17:21:13

回答

1

這是沒有意義的,你會得到一個編譯錯誤,警告你不兼容的類型。如果你只能做的常用3 [什麼]你應該只把它分配給一個一個維數組,即

int[][] arr; 
int[] otherArr; 
arr[0] = otherArr; 

- 編輯 -

你的代碼應工作正常。

output[x] = srcA[x]; 

output[x]是類型int[]的,所以是srcA[x]

0

,你會得到一個不兼容的類型錯誤。當您分配到第1維時,int[][]預計int[]

class test{ 
    public static void main(String[] args){ 
      int[][] myarr = new int[10][10]; 
      myarr[10] = 0; 
    } 
} 

j.java:4: incompatible types 
found : int 
required: int[] 
    myarr[10] = 0;} 
       ^
1 error 

編輯: 線output[x] = srcA[x];編譯就好了,因爲如果你看一下srcA[x]回報它是一個int[]。當您分配給output[x]時,它正在尋找int[]類型的對象。所以一切都很好。

+0

您可以詳細說明您的編輯。我不太明白 – Snowman 2010-10-23 17:35:32

+0

現在看什麼編輯 – 2010-10-23 17:39:36

3

另外請記住,你的2D陣列不需要是方形的; int[][]類型的變量表示該變量是int[] s的數組。

因此,讓我們說我們宣佈變量int[][] array = new int[3][]。那麼這意味着現在可以將array[0]類型爲int[]的任何其他值分配給int[]類型的任何其他值。

下面是一個簡單的例子程序:

public class Example { 
    public static void main(String args[]){ 
     int[][] a = new int[3][]; 
     a[0] = new int[]{1}; 
     a[1] = new int[]{1,2}; 
     a[2] = new int[]{1,2,3}; 
     display(a); 
    } 

    private static void display(int[][] array){ 
     for(int[] row : array){ 
      for(int value : row){ 
       System.out.print(value + " "); 
      } 
      System.out.println(); 
     } 
    } 
} 

輸出:

 
1 
1 2 
1 2 3 
0

要小心SRCB的長度。第6行嘗試訪問srcB [x],其中x可以達到srcA.length - 1;但是,您沒有檢查srcB足夠長,所以這可能容易受到ArrayIndexOutOfBoundsExceptions的影響。另外請記住,Java中的2D數組實際上是一維數組,其中每個元素本身就是一維數組。因爲這些元素可以是不同的大小,你的二維數組不需要是方形的。因此,您可能會認爲您保證了第3行中每個輸出的大小,但您只能保證寬度;高度可以根據分配給每個位置的陣列的大小而變化。