2013-02-04 79 views
2
while(it.hasNext()) 
{ 
    System.out.println("List: " +it.next().getProduct().getName() + " " + product.getName()); 

    if (it.next().getProduct().getName().equals(product.getName())) 
    { 
     System.out.println("asd"); 
    } 
} 

它返回同樣的事情:ArrayList的迭代器equals返回java.util.NoSuchElementException

名單:蘋果蘋果

列表:橙色橙色

但是當我嘗試比較他們我得到

列表:橙色橙色

異常在線程 「AWT-EventQueue的 - 0」 java.util.NoSuchElementException

,問題是在IF()行..如果我比較沒關係他們有或沒有getName()(因爲他們是相同的對象..)任何想法?

回答

11

您應該在每次迭代中只調用一次next()方法一次。它將光標移動到next()方法的每次調用中的下一個元素。你不想這樣做,以確保在每次調用next()之前執行hasNext(),以避免超過最後一個元素。

這將是東西如下

Product p = it.next(); 
//and use p onwards 
0

每個next()調用向前移動迭代器。你在代碼中調用它兩次。所以要麼增加hasnext()的第二個下一個()或刪除第二個下一個()的調用

1
Product temp = null; // might break your equals if written badly 
while (it.hasNext()) { 
    // get next product 
    Product product = it.next().getProduct(); // use this when you need to refer to "next" product 

    if (product.equals(temp)) { // compare previous product (temp) with this product 
     // do something 
    } 

    temp = product; // set temp equal to current product, on next iteration it is last 
}