Java Arraylist equals始终返回true
我的目标是制作Slenderman的2D棋盘游戏版本,但我在equals和hashCode方法方面遇到了麻烦 这里我有一个障碍物的数组列表(x和y坐标,玩家不能踩上),我还想生成另一个由坐标组成的数组列表,我可以在其中放置文件。(在游戏中,玩家必须找到这些文件才能获胜。) 我试图通过检查特定位置的周围环境来制作纸质清单,因为棋盘上不应该有任何纸张,玩家够不到 我的确切问题是,这个循环将所有障碍位置都放在了纸上,我不知道为什么Java Arraylist equals始终返回true,java,Java,我的目标是制作Slenderman的2D棋盘游戏版本,但我在equals和hashCode方法方面遇到了麻烦 这里我有一个障碍物的数组列表(x和y坐标,玩家不能踩上),我还想生成另一个由坐标组成的数组列表,我可以在其中放置文件。(在游戏中,玩家必须找到这些文件才能获胜。) 我试图通过检查特定位置的周围环境来制作纸质清单,因为棋盘上不应该有任何纸张,玩家够不到 我的确切问题是,这个循环将所有障碍位置都放在了纸上,我不知道为什么 for (Position p : obstacleList) {
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);
}
}
break标签代码>语句没有脱离循环。为此,您需要通过将标签:
移动到for
语句的前面来标记循环。您是否已经使用调试器对代码进行了单步调试?我怎么知道为什么总是这样。我不知道禁忌列表里有什么。很难帮助你。没有所有必要的信息…只是想澄清一下-您是否打算在纸质列表中包含所有未被其他4个障碍物包围的障碍物的坐标?(假设边缘像一个障碍物?)从您发布的代码中,看起来您可以简单地删除标签
标签,还可以删除所有中断标签代码>语句。一个if
块可以是空的。这实际上对我来说应该是可行的,至少对于那些不在边缘的块。我认为边缘代码是不对的。你能不能再发一些代码来说明你是怎么称呼它的?(我同意实施可能会更好,正如阿布拉所说)谢谢你,就这样!我完全移除了标签,现在它工作正常。如果你完全移除了标签,那么这不是这个答案所建议的。我很想看看你到底做了些什么使它正常工作@PeterHull完全移除标签(因此使用break;
而不是break标签;
将标签放在for
语句的前面)具有完全相同的效果,因为简单的break代码>语句将应用于最近的封闭循环,即for
循环。或者,OP也可以只放一个空语句“;
”而不是break。
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;
}
}