每个循环嵌套的NoSuchElementException

时间:2012-04-05 10:19:42

标签: java for-loop iterator boolean

我遇到功能检查碰撞的问题。无论我做什么,它都会抛出NoSuchElementException。这是:

public boolean isColliding(Pixel a) {
    if((a.x + a.size/2 <= x - size/2 &&
        a.x - a.size/2 >= x - size/2 ||
         a.x + a.size/2 <= x + size/2 &&
          a.x - a.size/2 >= x + size/2) &&
      (a.y + a.size/2 <= y - size/2 &&
        a.y - a.size/2 >= y - size/2 ||
         a.y + a.size/2 <= y + size/2 &&
          a.y - a.size/2 >= y + size/2) 
            ) { return true; } else { return false; }
}

这是完整的代码:

Main.java

Particle.java

ParticleHandler.java

Pixel.java

2 个答案:

答案 0 :(得分:1)

这是你的问题(Main.java):

for(Iterator<Pixel> iterator2 = pixel.iterator(); iterator2.hasNext();){
    if( iterator != iterator2 ){
        licz.field(iterator2.next());
        try{ 
            if( px.isColliding(iterator2.next())) { temporary++; } 
        } catch(Exception e) { }
    }
}
在没有iterator2.next()检查的循环内调用

hasNext()

还有:

if(damnLongCondition) { return true; } else { return false; }

可以(并且应该)减少到:

return damnLongCondition;

答案 1 :(得分:1)

您的错误可能来自此处:

for(Iterator<Pixel> iterator2 = pixel.iterator(); iterator2.hasNext();){
if( iterator != iterator2 ){
    licz.field(iterator2.next());
try{ 
        if( px.isColliding(iterator2.next())) { temporary++; } 
} catch(Exception e) { }
}

你在循环中第二次调用iterator2.next()而没有验证它是否还有下一个值。