2012-05-03 2 views
0

반복기에 문제가 있습니다. ArrayList를 반복 처리하고 이것보다 다른 Object를 찾고 이름을 출력해야합니다. 프로그램은 스레드를 사용합니다. itr.hasNext()true 일 때 루프가 while 루프에 들어갔을 때 반복기가 오류를 생성 할 수 있습니까?List 개체를 반복 할 수 없습니다.

스택 추적 :

private void tryName(Monster monster){ 

    Iterator<Monster> itr = room.monsters.iterator(); 

    while(itr.hasNext()){ 

     if (!itr.next().equals(monster)) { 
      System.out.println(monster.getName() + "some text " 
        + itr.next().getName()); 

      break; 
     } 

} 


} 

가 왜 ArrayList를 $ Itr.next()에 있나요

Thread [JOE] (Suspended (exception NoSuchElementException)) 
    ArrayList$Itr.next() line: not available [local variables unavailable] 
    Monster.beginFight(Monster) line: 55  
    Monster.run() line: 28 

방법 탭 표시 : 소스가를 찾을 수 없습니다?

+0

기본적으로 문제는 루프에서 'itr.next()'_twice_를 호출하고 있습니다. –

+0

디버그 정보로 컴파일하여 로컬 변수를 가져 오는 것을 잊지 마십시오. –

답변

7

itr.next을 호출 할 때마다 반복기가 다음 요소로 넘어갑니다. 다음과 같이해야합니다 :

while(itr.hasNext()) { 
    Monster m = itr.next(); 
    // rest of your code using m instead of itr.next() 
} 
관련 문제