0

私のプログラムには、次のように定義された 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 にアイテムが含まれているかどうかを確認してください - これを行っていないようです。

エラー メッセージや null ポインターなどはありません。私はそれをデバッグしようとしましたが、do while ループを再び開始するために continue ステートメントに進むことなく、同じ x 値と y 値を持つ 2 つのセルを比較するのを見てきました。

これは、それらが同じ値を持っていても、異なる「オブジェクト」であるため、同じように戻ってこないためだと思います。

これを修正して、それらの値が同じである場合、それらを互いに同等にするにはどうすればよいですか?

4

1 に答える 1

2

あなたのcontinueステートメントは内側のループを続けますfor(ここではまったく役に立ちません)。continue outerLoop;ラベルouterLoop:を の前に置いて、外側のループ: を継続することをお勧めしますdo {

Java APIが述べているように、メソッドはメソッドにcontains依存する必要がequalsあるため、オブジェクトの等価性は期待どおりに機能するはずです。

于 2013-05-01T10:23:23.487 に答える