当我在我的班级时,我在该类中创建了一个新的实例,比如实例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,以防您感兴趣。任何帮助将不胜感激,我已经花了很多时间来解决这个错误。提前谢谢。
答案 0 :(得分:1)
问题在于myTiles
。
在第一行中,您正在创建一个新的Square
,但是传入相同的一组图块。因此,两个正方形都引用了同一组图块。
您需要在myTiles