2013-10-01 7 views
9

私のリストのイテレータを使用してリストを反復しようとしています。目標は新しいログと同じ電話番号、タイプ、日付を含むログを検索することですjavaのイテレータを使用しているjava.util.NoSuchElementException

ただし、条件文で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

あなたは存在しない要素に移動するにはIteratorを強制的に一回の反復で倍の束next()を呼んでいます。

代わりの

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()を呼び出すたびに、それは前方根底にあるカーソルを移動します。

関連する問題