我有5个rectObj但循环只是继续两次。
这是我的代码:
public boolean bottomLeft() {
boolean ret = false;
Iterator<rectObj> rectItr = Main.rectAr.iterator();
while (rectItr.hasNext() && ret == false) {
rectObj e = rectItr.next();
if (x > e.getX() && x < e.getX()+e.getWidth()
&& y+h > e.getY() && y+h < e.getX()+e.getHeight()) {
ret = true;
}else{
if(rectItr.hasNext()) {
rectItr.next();
}
}
}
return ret;
}
rectObj rect1 = new rectObj(250,250,50,50);
rectObj rect2 = new rectObj(0,440,500,50);
rectObj rect3 = new rectObj(0,0,500,50);
rectObj rect4 = new rectObj(400,200,50,50);
rectObj rect5 = new rectObj(0,200,50,50);
rectAr.add(rect1);
rectAr.add(rect2);
rectAr.add(rect3);
rectAr.add(rect4);
rectAr.add(rect5);
我希望循环在整个数组中继续,除非它找到一个与之相撞的对象。
感谢您的回复!
答案 0 :(得分:2)
您在循环内的rectItr.next()
部分第二次调用else
。尝试删除if-else语句的else部分。
其他部分正在检查是否rectItr.hasNext()
,如果有,则调用rectItr.next()
。然后它返回到while循环的顶部,它再次执行相同的操作。因此,每个循环,如果if
测试为假,则它会调用rectItr.next()
一个额外的时间,并跳过数组中的下一个元素。
答案 1 :(得分:0)
@Dermot是对的。
您实际上可以按如下方式简化和重新格式化方法:
public boolean bottomLeft() {
for (rectObj e : Main.rectAr) {
if (x > e.getX()
&& x < e.getX() + e.getWidth()
&& y + h > e.getY()
&& y + h < e.getX() + e.getHeight()) {
return true;
}
}
return false;
}
...这表明您的方法中存在另一个错误。这一行
&& y + h < e.getX() + e.getHeight()
......应该......
&& y + h < e.getY() + e.getHeight()
......我想。