簡體   English   中英

嘗試創建ArrayList時獲取NullPointerException

[英]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();
}

foreach循環的解釋

請注意:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM