Java 在类中创建和更改的类更改原始类
当我在我的类中时,我在该类中创建一个新的类实例,比如实例I,然后我也在该类中更改该实例两个实例都被更改;在这里,我只想改变我 这个班叫Square 这种效果在平方的测试函数中得到了证明Java 在类中创建和更改的类更改原始类,java,artificial-intelligence,Java,Artificial Intelligence,当我在我的类中时,我在该类中创建一个新的类实例,比如实例I,然后我也在该类中更改该实例两个实例都被更改;在这里,我只想改变我 这个班叫Square 这种效果在平方的测试函数中得到了证明 void testFunction() { Square tempSqr = new Square(x + 1, myTiles, blankIndex); this.toPrint(); // tempSqr.toPrint(); tempSqr.switchTile(1, 2)
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()之后的内容;这个。Square()代码>更改。
这不是我想要的,我只想改变tempSqr
。
顺便说一下,tempSqr
正在改变
下面是switchTile()
:
public-void-switchTile(int-myX,int-myY){
迭代器e=myTiles.Iterator();
int计数器=0;
while(e.hasNext()){
瓦片t=e.next();
如果(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、 赛蒂(by),;
空白.setX(tx);
blank.setY(ty);
// /////////////
myTiles.set(计数器,t);
myTiles.set(blankIndex,blank);
}
计数器++;
}
}
代码的其余部分以防您感兴趣。任何帮助都将不胜感激,我已经在这个错误上花了很多时间。提前感谢。您的问题在于myTiles
在第一行中,您正在创建一个新的正方形
,但传递的是同一组分幅。因此,两个正方形都引用同一组瓷砖
您需要在myTiles上执行深度复制。第一段非常混乱。我无法访问代码(GitHub是否再次遭到DDOS攻击?叹气…),但当有人说当他们在一个实例中更改字段时,它在另一个实例中更改,通常会有一些静态成员不应该是静态。有时,一旦实例被创建为另一个实例的副本,但该对象有一个成员是对另一个对象的引用,该副本就应该复制另一个对象,而不是复制引用。
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++;
}
}