[英]Arraylist equals always returns true
我的目標是制作 Slenderman 的 2D 棋盤游戲版本,但我在使用 equals 和 hashCode 方法時遇到了問題。
在這里,我有一個 Arraylist 障礙物(x 和 y 坐標,玩家不能踩到),我還想生成另一個 Arraylist,它將由坐標組成,我可以在其中放置文件。 (在游戲中,玩家必須找到這些紙才能獲勝。)我正在嘗試通過檢查特定 position 的周圍環境來制作紙清單,因為板上不應該有任何紙,玩家可以'達不到。
我的確切問題是,這個 for-cycle 將所有障礙物位置放在 paperList 中,我不知道為什么。
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;
}
}
break label;
聲明沒有打破你的循環。 為此,您需要通過將label:
移動到for
語句之前來對循環進行 label。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.