![](/img/trans.png)
[英]Getting a NullPointerException when trying to pass an ArrayList to another class
[英]Getting a NullPointerException when trying to create ArrayList
我正在研究一種arraylist,它會將隨機的瓷磚添加到一個袋子里進行拼字游戲。 我的老師在解釋事情方面做得非常糟糕,所以我必須全力以赴。 我已經為包創建了構造函數,並且我正在嘗試創建包,但在調用時遇到空指針異常。
h2.RandBag.add(RandBag.java:11)中線程“main”java.lang.NullPointerException中的異常
繼承人主要返回錯誤的代碼:
for (Integer ival : rbag)
System.out.println(ival);
並且繼承了我用於構建的方法。
private ArrayList<E> bag; // container
private Random rand; // random generator
//constructors
public RandomBag(){
this.bag = new ArrayList<E>();
this.rand = new Random();
public RandomBag(int seed) {
this.bag = new ArrayList<E>();
this.rand = new Random(seed);
和迭代器,因為它返回null,這可能是問題。
public Iterator<E> iterator() {
return null;
}
我嘗試過返回不同的東西,但每次都會出錯。 迭代器沒有被解釋得那么多,所以我可能會遺漏一些東西。
RandomBag<Integer> rbag = new RandomBag<Integer>(17);
for (int i = 0; i < 8; ++i)
rbag.add(10+i);
iterator()
實現 雖然,我不知道您的所有要求和您當前的實現,但我很確定這是一個更好的實現:
public Iterator<E> iterator() {
return bag.iterator();
}
請注意:
for (Integer ival : rbag)
System.out.println(ival);
...這只是語法糖:
Iterator<Integer> it = rbag.iterator();
while (it.hasNext())
System.out.println(it.next());
這將解釋NullPointerException
請注意,如果您不想完全實現List
類的接口,而不是簡單地返回null,則最好拋出異常:
public Iterator<E> iterator() {
throw new UnsupportedOperationException();
}
然后更清楚的是為什么事情不起作用(還)
是的, iterator()
返回null
是問題所在。
for
循環基本上是糖:
Iterator<Integer> iter = rbag.iterator();
while (iter.hasNext()) {
Integer ival = iter.next();
System.out.println(ival);
}
如果iterator()
返回null,那么iter.hasNext()
調用將導致NullPointerException。
寫這個:
for (Integer ival : rbag)
System.out.println(ival);
寫這個是一樣的:
for (Iterator<Integer> iterator = rbag.iterator(); iterator.hasNext(); ) {
Integer ival = iterator.next();
System.out.println(ival);
}
這只是一種語法糖。 因此,如果從集合(rbag)返回null迭代器,它將始終以NullPointerException結束(java將嘗試在之后立即詢問.hasNext()的迭代器)
我建議你做點什么
public Iterator<E> iterator() {
return this.bag.iterator();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.