2014-05-15 72 views
1

我不明白爲什麼這段代碼會拋出一個空指針異常,因爲我認爲第3行將sampleArray[0][0])的值設置爲1這段代碼怎麼會拋出nullpointerexception?

int arrSize = 100; 
String[][] sampleArray = new String[arrSize][]; 
sampleArray[0][0]="1"; 
System.out.println(sampleArray[0][0]); 

任何幫助?

回答

10

sampleArray[0]尚未初始化爲數組。 你初始化數組的第一個維度,而不是第二個

您需要做的是這樣sampleArray[0] = new String[size]

String[][] sampleArray = new String[arrSize][]工作,因爲你正在創建具有其他數組引用數組的初始化。其他陣列中的每一個陣列都可以有不同的大小,您可以根據需要進行設置。我的意思是,以下將是完全合法的:

sampleArray[0] = new String[10]; sampleArray[1] = new String[5]; System.out.println(sampleArray[0][9]); System.out.println(sampleArray[1][4]);

+0

請參閱我對mtefi答案的評論。 –

+0

我更新了我的回答 – geoand

1

你不能只設置第一個維度的二維數組的大小。因爲它是一個數組數組,所以你不能找回沒有實例化數組的數組。

+0

確定代碼有效,如果\t我將第2行更改爲:\t String [] [] sampleArray = new String [arrSize] [10]; 這是否意味着我總是必須設置第一維和第二維的大小? 但我不明白爲什麼這仍然是一個有效的初始化程序: String [] [] sampleArray = new String [100] []; –

+0

它等於String [] sampleArray = new String [100] ..當你實例化一個數組時,你必須給它它的大小。嘗試使用ArrayList 而不是如果你想添加不同大小的陣列到一個數組,它更乾淨。 – AdamK

相關問題