gpt4 book ai didi

java - 我创建的 equals() 和 hashcode() 没有做任何事情

转载 作者:行者123 更新时间:2023-12-02 07:03:58 24 4
gpt4 key购买 nike

在我的程序中,我有一个名为 Cell 的类,定义如下:

public class Cell {
private int x;
private int y;

public Cell (int x, int y) {
this.x = x;
this.y = y;
}

@Override
public boolean equals (Object o) {
boolean result = false;
if (o instanceof Cell) {
Cell other = (Cell) o;
result = (this.x == other.x && this.y == other.y)
}
return result;
}

@Override
public int hashCode() {
int result = x;
result = 31 * result + y;
return result;
}
}

我有一个 Grid 类,如下所示(删除了许多方法并简化了变量名称):

public class Grid {
private Set<Cell> cellArray;

public Grid() {
cellArray = new HashSet<Cell>();
}

public Set<Cell> getCellArray() {
return cellArray;
}

public void addCellArray(Cell cell) {
cellArray.add(cell)
}
}

在我的代码主体中,我接受一个网格对象,如下所示:

public class Controller {
private Grid grid;
public Controller (Grid grid) (
this.grid = grid;

然后,我有一系列如下所示的循环:

private set<Cell> cellArray = grid.getCellArray();

boolean endLoop = false;
do {
x = randomGenerator.nextInt(10);
y = randomGenerator.nextInt(10);

for (int i = 0; i < length; i++) {
if (cellArray.contains(new Cell(x, y+i))) {
continue;
}
}
for (int j = 0; j < length; j++) {
cellArray.add(new Cell(x, y+i));
}
endLoop = true;
} while(!endLoop);

我知道这是一个非常困惑的情况,有太多的实例化(如果有人有使它更清晰的指针,请随意指出它们) - 然而,主要问题是第一个 for 循环旨在检查 cellArray 是否包含项目 - 它似乎没有这样做。

没有错误消息,没有空指针或类似的东西。我尝试过调试它,并看到它比较具有相同 x 和 y 值的两个单元格,而没有继续执行 continue 语句再次启动 do while 循环。

我假设这是因为即使它们具有相同的值,但它们是不同的“对象”,因此不会返回相同的值。

如果它们的值相同,我该如何解决这个问题并使它们彼此相等?

最佳答案

您的 continue 语句继续内部 for 循环(这里毫无用处)。您可能想继续外层循环:continue outerLoop;,并将标签 outerLoop: 放在 do { 前面。

the Java API声明,contains 方法应该依赖于您的 equals 方法,因此对象相等应该按照您的预期工作。

关于java - 我创建的 equals() 和 hashcode() 没有做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16316284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com