Java不会一直遍历数组

时间:2015-03-07 22:42:56

标签: java arrays loops

我有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);

我希望循环在整个数组中继续,除非它找到一个与之相撞的对象。

感谢您的回复!

2 个答案:

答案 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()

......我想。