2013-10-01 49 views
9

我想通過使用迭代器遍歷我的日誌列表遍歷列表。目標是搜索包含與新日誌相同的電話號碼,類型和日期的日誌java.util.NoSuchElementException在java中使用迭代器

但是,在我的條件語句中出現java.util.NoSuchElementException。有誰知道什麼可能會導致問題?

我的代碼

public void addLog(String phonenumber, String type, long date, int incoming, int outgoing) 
{ 
    //Check if log exists or else create it. 
    Log newLog = new Log(phonenumber, type, date, incoming, outgoing); 

    //Log exists 
    Boolean notExist = false; 

    //Iterator loop 
    Iterator<Log> iterator = logs.iterator(); 


    while (iterator.hasNext()) 
    { 
     //This is where get the exception 
     if (iterator.next().getPhonenumber() == phonenumber && iterator.next().getType() == type && iterator.next().getDate() == date) 
     { 

      updateLog(newLog, iterator.next().getId()); 
     } 
     else 
     { 
      notExist = true; 
     } 

    } 

    if (notExist) 
    { 
     logs.add(newLog); 
    } 

} 

回答

37

要調用next()一堆倍在一次迭代中迫使Iterator移動到一個不存在的元素。

而不是

if (iterator.next().getPhonenumber() == phonenumber && iterator.next().getType() == type && iterator.next().getDate() == date) 
{ 
    updateLog(newLog, iterator.next().getId()); 
    ... 

使用

Log log = iterator.next(); 

if (log.getPhonenumber() == phonenumber && log.getType() == type && log.getDate() == date) 
{ 
    updateLog(newLog, log .getId()); 
    ... 

每次調用Iterator#next()時,它向前移動光標底層。