2013-03-26 67 views
0

因此,添加東西到我的定製鏈接列表導致NullPointerException,我不能,爲我的生活找出原因。該計劃的目的是模擬抽屜櫃,並以抽屜爲節點的列表進行模擬。每個抽屜都有一個包含家庭對象作爲節點的列表。添加到自定義鏈接列表導致NullPointerException

下面是代碼的相關位。在我的UI類new ChestOfDrawers(3);

public class ChestOfDrawers{ 

    private static OwnList chest; 
    private static int[] parametres; 

    public ChestOfDrawers (int drawers){ 
     chest = new OwnList(); 
     create(); 
    } 

    public static void create(){ 
     for (int i = 0; i < parametres.length; i++) { 
      Object drawer = new Drawer(i, parametres[i]); 
      chest.add(i, drawer); //This is causing the error 
     } 
    } 
} 

Drawer類正在這裏所指的是抽屜類當我創建一個錯誤發生。它需要int i作爲ID和int parametres作爲抽屜容量。 parametres[]陣列在添加到列表之前被填充,並且包含抽屜容量的信息。問題中的鏈接列表(OwnList)正確運行,因爲它是提供的課程材料的一部分,與Java本身幾乎相同。我在另一個測試課上測試了這個類,它運行良好,我在這裏犯了一個錯誤。請幫忙!

+2

你爲什麼在這裏使用靜態成員? – 2013-03-26 20:53:48

+0

爲了能夠從靜態上下文中引用它們,這與 – user2213230 2013-03-26 21:01:43

+0

不相關。但是這個代碼不太可能是合理的;每次創建新對象時,都會覆蓋靜態引用。 – 2013-03-26 21:03:38

回答

4

問題是你沒有初始化參數數組。該字段默認爲空。您需要將其初始化,或者在靜態初始化塊中進行初始化。另外,爲什麼這兩個字段和create方法是靜態的?這些肯定看起來像實例狀態......

這裏有一個更好的版本:

public final class ChestOfDrawers{ 
    private final OwnList chest = new OwnList(); 
    private final int[] parametres; 

public ChestOfDrawers (int drawers){ 
    if (drawers < 0) throw new IllegalArgumentException("Drawers may not be negative"); 
    chest = new OwnList(); 
    parametres = new int[drawers]; // <-- I'm assuming that's the intended meaning 
    initialize(); 
}   

private void initialize(){ 
    for(int i = 0; i < parametres.length; i++){ 
     Object drawer = new Drawer(i, parametres[i]); // <-- parametres[i] will always be 0 
     chest.add(i, drawer); 
    } 
} 
} 

我不知道你所需要的參數應用陣列實際上包含(int型的新陣列將充滿了零值) - 但我會把它作爲練習給讀者:-)