2013-09-27 89 views
1

我正在嘗試訪問屬於對象一部分的數組。對象內的Java數組

我收到錯誤 「在線程異常 」主「 在Main.main(Main.java:24)顯示java.lang.NullPointerException在OrderedStringList.add(OrderedStringList.java:21)」

我有把我的程序剪下來放到裸露的骨頭上,剪掉所有可能干擾輸出的東西。

public class Main { 

public static void main(String[] args) { 

    int x = 5; 

    OrderedStringList myList = new OrderedStringList(); 

    myList.add(x); 
    } 
} //end class 

此代碼引用類OrderedStringList。

public class OrderedStringList { 

public int values[]; 

OrderedStringList(){ 
    int values[] = new int[5]; 
} 

public void add(int y) { 
    values[0] = y; 
    System.out.print(values[0]); 
} 

我假設錯誤中的數字21和24是行號。由於我在原始代碼中註釋了一些內容,因此我發佈的代碼通常會在其中包含一些內容。主線24是:myList.add(x);。 OrderedStringList的第21行是:values[0] = y;

我猜測,有一件事很簡單,我失蹤了。任何感謝。

謝謝。

+1

'Main.java:24'和'OrderedStringList.java:21'確實指向了你有錯誤的類和行號。 – nhgrif

+0

在你的構造函數中,int values [] = new int [5];'聲明一個局部變量'values'!注意,你的編譯器應該警告你這個未使用的變量。 –

回答

5

這裏

OrderedStringList(){ 
    int values[] = new int[5]; 
} 

你的影子類成員values

更改爲:

OrderedStringList(){ 
    values = new int[5]; 
} 
+1

+1秒鐘打敗我:P – MadProgrammer

+0

非常感謝!自從我和java一起工作了幾個月,我想我比我想象的更加生疏。不勝感激。 – UnlovedPanda

2

您已經聲明values兩次....

public int values[]; 

OrderedStringList(){ 
    int values[] = new int[5]; 
} 

這通常被稱爲陰影。

在構造改變數組的初始化類似...

public int values[]; 

OrderedStringList(){ 
    value = new int[5]; 
} 

,而不是...

+1

+1換位:-P – jedwards

2

這個聲明只是方法的範圍內values[]陣列。

OrderedStringList(){ 
    int values[] = new int[5]; 
} 

如果要指Class範圍使用

OrderedStringList(){ 
    values = new int[5]; 
} 
+0

:-)對不起,今晚剛看到很多令人難以置信的「答案」 – jedwards

1

隨着線int values[] = new int[5];,你宣稱只存在於構造一個全新的int[]。將其更改爲values = new int[5];