2013-04-09 163 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

相关问题