我遇到了在Java中向arrayList添加对象的问题。我运行代码时出现以下错误。这是我的两个文件的片段。如果有人指出我的错误,我会非常感激。 谢谢,乔
在House的House.addRoom(House.java:18)上的java.lang.NullPointerException。(House.java:36)
// ROOM CLASS
public Room () {
Scanner scan = new Scanner(System.in);
scan.useDelimiter("\n");
System.out.println("Enter description of room:");
description = scan.next();
System.out.println("Enter length of room:");
length = scan.nextDouble();
System.out.println("Enter width of room:");
width = scan.nextDouble();
}
// HOUSE CLASS
public class House {
private static ArrayList<Room> abode;
public void addRoom (){
abode.add(new Room ());
}
public House () {
idNum = ++internalCount;
Scanner scan = new Scanner(System.in);
scan.useDelimiter("\n");
System.out.println("Enter address of house:");
address = scan.next();
System.out.println("Enter number of rooms:");
numRooms = scan.nextInt();
System.out.println("Enter type of house:");
houseType = scan.next();
for (int i=1; i<=numRooms; i++){
addRoom();
}
}
}
答案 0 :(得分:3)
在您添加元素之前,您需要初始化您的arraylist
。在您的构造函数中初始化
private static ArrayList<Room> abode;
public House()
{
abode = new ArrayList<String>();
//rest of your code
}
顺便说一句,对于接口而不是实现来说,编码总是一个很好的做法:
即,List<Room> abode = new ArrayList<String>();
答案 1 :(得分:1)
您需要创建一个列表:
private static ArrayList<Room> abode = new ArrayList<Room>();
如果不这样做,abode
将为null
,您将获得NullPointerException
。
另外,abode
有static
的原因吗?这意味着它由House
的所有实例共享。那是你想要的吗?
答案 2 :(得分:0)
更改此
private static ArrayList<Room> abode;
到
private static ArrayList<Room> abode = new ArrayList<Room>();
您正在尝试使用列表引用而不为其分配内存。
答案 3 :(得分:0)
joe你可以使用List
添加数组列表例如。 ArrayList results = new ArrayList();
列表与LT; ResolveInfo&GT;
然后
results.add();
答案 4 :(得分:0)
Joe,首先,您需要在访问任何对象的字段或方法之前创建对象。
在你的代码中, private static ArrayList abode; //尚未创建对象
您只声明默认指向null的引用。基本上,您没有在堆中分配任何内存来存储对象的状态。因此,首先需要使用new运算符创建ArrayList类的对象,然后可以对此对象执行各种操作。 所以,将代码替换为
private static ArrayList abode = new ArrayList();