【发布时间】:2018-11-22 21:53:24
【问题描述】:
我正在制作一个包含星星的 2D 游戏。我决定在名为 Star 的类中创建提供随机坐标的构造函数。
public Star(){
super(0,0);
x = randomX.nextInt(maxX - minX + 1);
y = randomY.nextInt(maxX - minY + 1);
}
然后,在其他类中,我将它们放在 HashSet 中
Set<Star> star = new HashSet<>();
public Set<Star> generateStars(){
while (star.size() < numberOfStars){
star.add(new Star());
}
return star;
}
当然,我有 render 和 tick 方法,但我认为不值得粘贴它们。我的讲师告诉我,可以有相同的星星,为了防止我应该使用使用哈希码的身份函数。有人可以帮我弄清楚吗?我想这个函数应该检查哈希码是否相同,如果是这种情况,它应该只返回一个值,这样我们将在 HashSet 中添加 1 个对象而不是 2 个对象。我说的对吗?
【问题讨论】:
-
同一颗星是什么意思?如果相等的标准是相同的坐标,只需根据坐标生成 hashcode 和 equals。如果没有,只需选择适当的相等标准并根据它覆盖哈希码和相等。
-
您的构造函数有一些问题,使用相同的RNG可能会更好。此外,您的 y 坐标正在使用
maxX变量。 -
是的,我的意思是坐标。
-
你需要创建一个 hashCode 和 equals 方法。您可以使用 IDE 生成这些。
标签: java collections