[英]Java not iterating all the way through array
我有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);
我希望循環在整個數組中繼續進行,除非找到與之碰撞的對象。
感謝您的任何答復!
您正在循環內的else
部分中第二次調用rectItr.next()
。 嘗試刪除if-else語句的else部分。
else部分正在檢查rectItr.hasNext()
是否存在,是否正在調用rectItr.next()
。 然后返回到while循環的頂部,該循環再次執行相同的操作。 因此,在每個循環中,如果if
測試為false,則它將額外調用rectItr.next()
,並跳過數組中的下一個元素。
@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()
... 我認為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.