有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Arraylist equals始终返回true

我的目标是制作Slenderman的2D棋盘游戏版本,但我在equals和hashCode方法方面遇到了麻烦

这里我有一个障碍物的数组列表(x和y坐标,玩家不能踩上),我还想生成另一个由坐标组成的数组列表,我可以在其中放置文件(在游戏中,玩家必须找到这些文件才能获胜。) 我试图通过检查特定位置的周围环境来制作纸质清单,因为棋盘上不应该有任何纸张,玩家够不到

我的确切问题是,这个循环将所有障碍位置都放在了纸上,我不知道为什么

for (Position p : obstacleList) {
            Position p1 = new Position (p.x - 46, p.y);
            Position p2 = new Position (p.x + 46, p.y);
            Position p3 = new Position (p.x, p.y - 46);
            Position p4 = new Position (p.x, p.y + 46);

            label :
            {
                if (obstacleList.contains(p1) && obstacleList.contains(p2) && obstacleList.contains(p3) && obstacleList.contains(p4)) {
                    break label;
                } else if (p1.x < 0 && obstacleList.contains(p3) && obstacleList.contains(p4)) {
                    break label;
                } else if (p2.x > WIDTH && obstacleList.contains(p3) && obstacleList.contains(p4)) {
                    break label;
                } else if (p3.y < 0 && obstacleList.contains(p1) && obstacleList.contains(p2)) {
                    break label;
                } else if (p4.y > HEIGHT && obstacleList.contains(p1) && obstacleList.contains(p2)) {
                    break label;
                } else paperList.add(p);
            }
        }
public class Position{
    public int x;
    public int y;

@Override
    public int hashCode() {
        return Objects.hash(x, y);
    }

@Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (!(obj instanceof Position)) return false;
        if (getClass() != obj.getClass()) return false;
        if (obj == this) return true;

        Position position= (Position) obj;
        return x == position.x && y == position.y;
    }
}

共 (1) 个答案

  1. # 1 楼答案

    break label;语句没有脱离循环。要做到这一点,您需要通过将label:移动到for语句之前来标记循环