检查ArrayList中每个多维数据集的冲突

时间:2019-05-22 08:19:03

标签: java arraylist foreach

我正在尝试检查arraylist中每个多维数据集的冲突,但是结果是,该冲突仅适用于arraylist中的最后一个多维数据集。

public class Cube {

    public int x, y;
    private boolean conflict = false;

    public Cube(int x, int y) {
      this.x = x;
      this.y = y;
    }

    public void moveDown() {
        if(!conflict("down")) {
            this.y += 18;
        }
    }

    public boolean conflict(String dir) {
        if(dir.equals("down")) {
            for(Cube cubes : Panel.cubes) {
                if(this.hashCode() != cubes.hashCode()) {
                    if(this.y + 18 == cubes.y && this.x == cubes.x || this.y >= Main.height - 18*4) {
                        this.conflict = true;
                    } else this.conflict = false;
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

首先,您的冲突方法没有return,我想知道它是如何编译的。但是问题是发现碰撞时,您永远都不会出没for loop

public boolean conflict(String dir) {
    if (dir.equals("down")) {
        for(Cube cubes : Panel.cubes) {
            if(this.hashCode() != cubes.hashCode()) {
                if(this.y + 18 == cubes.y && this.x == cubes.x || this.y >= Main.height - 18*4) {
                    this.conflict = true;
                    break;
                } else {
                    this.conflict = false;
                }
            }
        }
    }

    return this.conflict;
}

答案 1 :(得分:1)

当您发现冲突时,您似乎想摆脱循环,因为否则下一次迭代可能会重置该标志(这说明了为什么“冲突仅对arraylist中的最后一个多维数据集起作用”)。

    if (dir.equals("down")) {
        for(Cube cubes : Panel.cubes) {
            if(this.hashCode() != cubes.hashCode()) {
                if(this.y + 18 == cubes.y && this.x == cubes.x || this.y >= Main.height - 18*4) {
                    this.conflict = true;
                    break;
                } else {
                    this.conflict = false;
                }
            }
        }
    }

顺便说一句,您的conflict方法似乎缺少return语句。