簡體   English   中英

Java不會完全遍歷數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM