添加到自定义链表将导致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)的功能是100%正确的,因为它是提供的课程材料的一部分,它几乎与Java自己的相同。我在另一个测试类中测试了这个类,它工作得很好,我只是在某个地方犯了一个错误。请帮助!

问题是您没有初始化参数数组。该字段默认为空。您需要在声明它的地方或在静态初始化块中初始化它。另外,为什么这两个字段和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数组将被零值填充)-但我将把它留给读者作为练习:-)

相关内容

  • 没有找到相关文章

最新更新