0

我有功能检查碰撞的问题。无论我做什么,它都会抛出 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; }
}

这是完整的代码:

主.java

粒子.java

粒子处理器.java

像素.java

4

2 回答 2

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;
于 2012-04-05T10:24:34.433 回答
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() 而不验证它是否仍然具有下一个值。

于 2012-04-05T10:25:02.017 回答