2013-04-09 59 views
0

我遇到了添加到ArrayList的問題。 在我的主要方法,我有:爲什麼我得到這個空錯誤?我正在嘗試添加到ArrayList

public static void main(String[] args) 
{ 
    ArrayList<Bin> warehouse = new ArrayList<Bin>(); 
    Bin a = new Bin("A"); 
    Bin b = new Bin("B"); 
    warehouse.add(a); 
    warehouse.add(b); 
    a.add(new BinItem("1234-0", 500)); 
    a.add(new BinItem("1234-1", 25)); 
    a.add(new BinItem("1234-2", 7720)); 
    b.add(new BinItem("1234-3", 1000)); 
    for (Bin bn : warehouse) 
     System.out.println(bn); 
} 

在bin類有:

private String myName; 
private ArrayList<BinItem> myContents; 
public Bin(String name) 
{ 
    myName = name; 
} 

public String getName() 
{ 
    return myName; 
} 

public ArrayList<BinItem> getContents() 
{ 
    return myContents; 
} 

public void add(BinItem b) 
{ 
    myContents.add(b); //This is where I'm getting the error. 
} 

public String toString() 
{ 
    String s = "Bin " + myName + ":\n"; 
    for (BinItem b : myContents) 
     s += b + "\n"; 
    return s; 
} 

它編譯罰款,但每當我運行它,它說:「顯示java.lang.NullPointerException 」在標記的線。這可能是愚蠢的,但任何人都可以幫助我?非常感謝。

+0

在它上面放置一個斷點並檢查調試器對'myContents'和'b'所說的內容。 – ashes999 2013-04-09 02:18:59

回答

0

由於在toString()方法中,您正在嘗試迭代通過myContents ArrayList,該列表從未爲大部分項目初始化。

2

它不會出現你在任何地方

myContents = new ArrayList<BinItem>(); 
2

初始化myContents看你的代碼,好像你從來沒有初始化myContents

private ArrayList<BinItem> myContents;

你真的應該總是初始化:

private ArrayList<BinItem> myContents = new ArrayList<BinItem>();

要確定的最好方法是設置斷點並運行調試器。調試是非常非常有用的技能(並且在Eclipse中非常容易啓動)。

看起來好像myContents爲空,而不是b

+0

非常感謝。完美的作品。 – user1914491 2013-04-09 02:24:03

+0

很高興幫助。請將其中一個答案標記爲已接受(點擊白色勾號)。 – ashes999 2013-04-10 11:25:08