2013-06-23 89 views
1

2D陣列如果我聲明的2D陣列,例如:初始化在JAVA

int[][] numbers = new int[5][]; 

我想你必須單獨地聲明/初始化各5爲int []? 比如,以前我分配一個值數[0] [1],我不得不說:

​​

我寫了一個小程序,並明確提出一個價值數[0] [1]運行它,它沒有初始化數字[0]。 我完全不認爲單個數組必須先在2d數組中初始化?

編輯:我的誤解是在初始化。前兩條語句沒問題,因爲我聲明瞭goodArray中每個int []的長度爲3,這會導致它們全部被初始化。而在badArray聲明,我只是宣佈有多少陣列有(3),所以我得到一個NPE:

int [][]goodArray = new int[3][3]; 
goodArray[0][1] = 2; 

int[][] badArray = new int[3][]; 
badArray[0][0] = 2; 
+1

這不應該工作,它會拋出一個NPE,當我嘗試。你可以發佈一個簡短但完整的程序來證明這一點嗎? –

+1

這樣你可以做不同大小的數組,例如'numbers [0] = new int [5]'和'numbers [1] = new int [7]' – nachokk

回答

0

隨着Java的多維數組,你可以指定一個位置,沒有必要單獨定義他們。

+0

我看到了。出於某種原因,我認爲你必須在設置特定索引值之前聲明數組。我知道你用一個數組做。 – user1154644

0

可以容易地測試使用類似下面的實施例中的二維陣列的行爲:

int[][] numbers1 = new int[][] { {1, 2, 3}, {1, 2, 3, 4, 5}}; /* full initialization */ 
numbers1 = new int[3][]; /* [3][0] is null by default */ 
try { 
    System.out.println(numbers1[0][0]); 
} catch (NullPointerException e) { 
    System.out.println(e); 
} 
numbers1[0] = new int[3]; /* all three ints are initialized to zero by default */ 
System.out.println(numbers1[0][0]); 
numbers1[0] = new int[] {1, 2, 3}; 
System.out.println(numbers1[0][0]); 

將產生以下輸出:

java.lang.NullPointerException 
0 
1 
0

INT [] []數=新INT [5] [];

隨着已創建5 INT []一個維陣列上一行。現在您需要在使用它們之前說出每個一維數組的大小。 Java提供了這種靈活性,你可以在2D數組中使用可變大小的一維int []數組。