0

我在将对象添加到 Java 中的 arrayList 时遇到问题。运行代码时出现以下错误。这是我的两个文件的片段。如果有人指出我的错误,我将非常感激。谢谢,乔

java.lang.NullPointerException at House.addRoom(House.java:18)at House.(House.java:36)

//房间类

  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();
   }

//家庭类

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();
    }
  }
}
4

5 回答 5

3

您需要在添加元素之前对其进行初始化arraylist。可能在构造函数中进行初始化

private static ArrayList<Room> abode;

public House()
{
 abode = new ArrayList<String>();
//rest of your code 
}

顺便说一句,编写接口而不是实现总是一个好习惯:

IE, List<Room> abode = new ArrayList<String>();

于 2013-03-14T10:47:10.857 回答
1

您需要创建一个列表:

private static ArrayList<Room> abode = new ArrayList<Room>();

如果你不这样做,abode将会是null并且你会得到一个NullPointerException.

还有,是不是有abode原因static?这意味着它由House. 那是你的意图吗?

于 2013-03-14T10:48:15.043 回答
0

改变这个

private static ArrayList<Room> abode;

private static ArrayList<Room> abode = new ArrayList<Room>();

您正在尝试使用列表引用而不为其分配内存。

于 2013-03-14T10:51:13.403 回答
0

乔你可以使用 List 添加数组列表

例如。ArrayList 结果 = 新 ArrayList();

列表<ResolveInfo>

进而

结果.add();

于 2013-03-14T10:54:11.870 回答
0

Joe,首先您需要在访问任何对象的字段或方法之前创建对象。

在您的代码中,私有静态 ArrayList 住所;// 对象尚未创建

您仅声明默认指向 null 的引用。基本上,您没有在堆中分配任何内存来存储对象的状态。因此,首先您需要使用 new 运算符创建一个 ArrayList 类的对象,然后您可以对该对象执行各种操作。所以,将您的代码替换为

私有静态 ArrayList abode = new ArrayList();

于 2013-03-14T11:08:12.060 回答