Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java没有通过数组一路迭代_Java_Arrays_Loops - Fatal编程技术网

Java没有通过数组一路迭代

Java没有通过数组一路迭代,java,arrays,loops,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

我有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);
public boolean bottomLeft(){
布尔ret=false;
迭代器rectItr=Main.rectAr.Iterator();
while(rectItr.hasNext()&&ret==false){
rectObj e=rectItr.next();
如果(x>e.getX()&&xe.getY()&&y+h
我希望循环在整个数组中继续,除非它找到与之碰撞的对象


谢谢你的回复

您正在循环中的
else
部分第二次调用
recitr.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;
}
public boolean bottomLeft(){
for(rectObj e:Main.rectAr){
如果(x>e.getX()
&&xe.getY()
&&y+h
。。。这表明您的方法中还有另一个bug。这条线

      && y + h < e.getX() + e.getHeight()
&&y+h
。。。应该是

      && y + h < e.getY() + e.getHeight()
&&y+h

。。。我想。

谢谢你指出我的错误!然而,“只能迭代一个数组或java.lang.Iterable的实例”@StephenC我不久前看到了一篇非常有趣的谈话/博客文章,其中有一条特别的说明,当你有大量复制的代码段,但差异很小时,在后面的一个副本中经常会出现这样的错误。我删除了下一个语句,并检测到另一个rectObj的冲突,但删除了与下一个satementAh一起工作的一个,我完全删除了if语句,现在它工作得很好!非常感谢你!