Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我创建的equals()和hashcode()没有做任何事情_Java_Equals_Hashset - Fatal编程技术网

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

Java 我创建的equals()和hashcode()没有做任何事情,java,equals,hashset,Java,Equals,Hashset,在我的程序中,我有一个名为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;

在我的程序中,我有一个名为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;
    }
}
我有一个网格类,就像这样(许多方法被删掉,变量名被简化):

然后,我有一系列的循环,看起来像这样:

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);
private set ceralray=grid.getceralray();
布尔endLoop=false;
做{
x=随机发生器。下一个(10);
y=随机发生器。下一个(10);
for(int i=0;i
我知道这是一个非常混乱的过程,有太多的实例化正在进行(如果有人有使它更干净的指针,请随意指出)——然而,主要的问题是第一个for循环是为了检查cellArray是否包含这些项——它似乎没有这样做

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

我假设这是因为,即使它们有相同的值,但它们是不同的“对象”,因此它们并不相等


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

您的
continue
语句继续内部
for
-循环(这在这里是非常无用的)。您可能希望继续外部循环:
continue outerLoop
,标签
outerLoop:
放在
do{
前面


如前所述,
contains
方法应该依赖于
equals
方法,因此对象相等应该按照您的预期工作。

私有集cellArray=Grid.getCellArray()
getCellAry
网格中不是静态的。这将显示编译时错误。为什么它需要是静态的?我没有收到任何编译时错误。如果不创建类的实例,你怎么能调用类的
非静态
方法?抱歉-我明白你的意思。为了简洁,我删掉了很多代码.我在这个类的构造函数中有它的一个实例(作为控制器)。我现在编辑我的问题以反映这一点。这就是罚单。我不知道你可以标记循环。现在,整理该死的代码。谢谢!
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);