2013-03-14 220 views
0

我在將對象添加到Java中的arrayList時遇到問題。當我運行我的代碼時,出現以下錯誤。這是我的兩個文件的片段。如果有人指出我的錯誤,我會非常感激。 謝謝,喬將對象添加到arrayList

顯示java.lang.NullPointerException在House.addRoom(House.java:18)在房屋。(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(); 
    } 

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

回答

3

需要初始化arraylist添加元素之前在it.possibly初始化構造

private static ArrayList<Room> abode; 

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

順便說一句,它始終是一個很好的做法,代碼,接口,而不是實現:

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

+0

-1您是否嘗試編譯您的答案? – gontard 2013-03-14 10:49:35

+0

@gontard你檢查我的編輯?? :) – PermGenError 2013-03-14 10:49:48

+0

你的第n編輯:)?沒有。 – gontard 2013-03-14 10:50:59

1

您需要創建一個列表:

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

如果你沒有,abode將是null,你會得到一個NullPointerException

另外,有沒有原因abodestatic?這意味着它由House的所有實例共享。那是你想要的嗎?

+0

+1,用於調用靜態修飾符。 – gontard 2013-03-14 10:57:11

0

更改此

private static ArrayList<Room> abode; 

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

您正在嘗試使用列表參考,而不爲它分配內存。

0

joe你可以添加列表使用列表

例如。 ArrayList results = new ArrayList();

列表< ResolveInfo>

然後

results.add();

0

Joe,首先你需要在訪問任何對象的字段或方法之前創建對象。

在你的代碼中, private static ArrayList abode; //對象尚未創建

您聲明的只是默認指向null的引用。基本上,你沒有在堆中分配任何內存來存儲對象的狀態。因此,首先需要使用new運算符創建ArrayList類的對象,然後可以對此對象執行各種操作。 因此,將您的代碼替換爲

private static ArrayList abode = new ArrayList();