2013-10-01 11 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()을 요구하고있다.

Log log = iterator.next(); 

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

당신이 Iterator#next()를 호출 할 때마다 사용하는 대신

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

, 그것은 앞으로 기본 커서를 이동합니다.

관련 문제