2012-05-03 66 views
0

迭代器遇到问题。它需要迭代ArrayList并查找除此以外的任何其他对象并打印它的名称。程序使用线程。当itr.hasNext()等于true时,迭代器在输入时如何产生错误while迭代列表对象失败

堆栈跟踪:

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

方法

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()选项卡显示:源未发现

+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() 
}