将对象添加到arrayList

时间:2013-03-14 10:45:41

标签: java arraylist

我遇到了在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();
    }
  }
}

5 个答案:

答案 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

另外,abodestatic的原因吗?这意味着它由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();