因此,在我的自定义链接列表中添加内容会导致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自己的相同。我在另一个测试类中测试了这个类,它工作得很好,我在某个地方犯了一个错误。请帮忙!
答案 0 :(得分: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数组将填充零值) - 但我会把它作为练习留给读者: - )