2014-03-31 46 views
-2

我的問題是,我需要找到矢量內容中的對象,以便我可以將它們打印到面板。但是,當我使用此代碼來遍歷矢量它不會到達對象= it.next()行。所以當我嘗試調用對象繪製方法時,它會給我一個空指針,因爲對象未初始化。如何使用迭代器去查找某個對象?

public PaintingPanel(Vector contents){ 
    this.contents = contents; 
    Iterator it = contents.iterator(); 

    while(it.hasNext()){ 
     if(it.next().equals(ball)){ 
      ball = (Ball) it.next(); 
     } else if (it.next().equals(bricks)){ 
      bricks.add((Brick) it.next()); 
     } else if (it.next().equals(paddle)){ 
      paddle = (Paddle) it.next(); 
     } 
+0

Answerers,請說一下關於'vector'和* raw * .. – Maroun

+0

這個模式很奇怪,爲什麼你需要這個assignement如果等於 –

回答

0

您正在遍歷每個if/else條件。更好地存儲檢索到的對象,然後進行比較。也許是這樣的:

 while(it.hasNext()){ 
     Object itObj = it.next(); 
     if(itObj.equals(ball)){ 
      ball = (Ball) it.next(); 
     } else if ((itObj.equals(bricks)){ 
      bricks.add((Brick) it.next()); 
     } else if ((itObj.equals(paddle)){ 
      paddle = (Paddle) it.next(); 
     } 
5

Iterator將提前每次調用.next()一個價值。在你的循環中,你提前三次,因此吞下三項!

而是執行此操作:

Object element; 
while (it.hasNext()) { 
    element = it.next(); 
    if (element.equals(ball)) // etc etc 
} 

而且,你不應該使用Vector。不在2014年。

使用List<X>其中X是正確的類型,而不是!


最後,你似乎已經放棄了其他的問題,你的問題指出:「它沒有得到對象= it.next()線」。需要更多的代碼!考慮到你的謂詞的奇怪性,這個問題甚至比這個更重要。

尤其是,您擊中NullPointerException而不是「NoSuchElementException」,這是Iterator如果沒有更多元素可以產生的情況下拋出。

+0

哎非常感謝很多人解決了我的問題 – user3479774