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 楼答案
break label;
语句没有脱离循环。要做到这一点,您需要通过将label:
移动到for
语句之前来标记循环