所以,添加东西到我的自定义链表是导致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数组将被零值填充)-但我将把它留给读者作为练习:-)