Java没有通过数组一路迭代
我有5个rectObj,但循环只持续了两次 这是我的密码: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
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语句,现在它工作得很好!非常感谢你!