在类中创建和更改的类更改原始类

时间:2014-03-11 22:06:45

标签: java artificial-intelligence

当我在我的班级时,我在该类中创建了一个新的实例,比如实例i,然后我也在该类中更改了该实例,两个实例都被更改了;我只希望实例i被改变。

这个班叫做Square。

这种效果在Square的测试函数中得到证明。

void testFunction() {
    Square tempSqr = new Square(x + 1, myTiles, blankIndex);
    this.toPrint();
    // tempSqr.toPrint();
    tempSqr.switchTile(1, 2);// switch is editing parent nodes
    // tempSqr.toPrint();
    this.toPrint();
}

这会产生输出

1 2 3
4 5 6
7 8 0

----这不是输出的一部分,而是用于stackoverflow的格式化

1 2 3
4 5 6
7 0 8

tempSqr.switchTile(); this.Square();更改后请注意。 这不是我想要的,我只想改变tempSqr。 顺便说一句tempSqr正在改变。

以下是switchTile()

public void switchTile(int myX, int myY) {
    Iterator<Tile> e = myTiles.iterator();
    int counter = 0;

    while (e.hasNext()) {
        Tile t = e.next();

        if (myX == t.getX() && myY == t.getY()) {
            Tile blank = myTiles.get(blankIndex);
            int tx = t.getX();
            int ty = t.getY();
            // /////
            int bx = blank.getX();
            int by = blank.getY();
            // /////////
            t.setX(bx);
            t.setY(by);
            blank.setX(tx);
            blank.setY(ty);
            // /////////////
            myTiles.set(counter, t);
            myTiles.set(blankIndex, blank);
        }
        counter++;
    }
}

代码的其余部分为https://github.com/danielGood/AISearchDemo,以防您感兴趣。任何帮助将不胜感激,我已经花了很多时间来解决这个错误。提前谢谢。

1 个答案:

答案 0 :(得分:1)

问题在于myTiles

在第一行中,您正在创建一个新的Square,但是传入相同的一组图块。因此,两个正方形都引用了同一组图块。

您需要在myTiles

上执行深层复制