簡體   English   中英

Arraylist 等於總是返回真

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM