gpt4 book ai didi

Java 复制构造函数和克隆不起作用

转载 作者:行者123 更新时间:2023-12-01 12:20:08 25 4
gpt4 key购买 nike

public class Stav implements Cloneable{
private int[] pole;

public Stav(int[] pole){
this.pole = pole;
}
public Stav(Stav a){
this.pole = a.pole;
}
public void move(boolean left){
int empty = findEmpty();
if(left){
this.pole[empty] = this.pole[empty - 1];
this.pole[empty - 1] = 0;
}
else{
this.pole[empty] = this.pole[empty + 1];
this.pole[empty + 1] = 0;
}
}

Jednotka pom = fronta.remove();
Stav nStav = new Stav(pom.getStav().getPole());
Stav pomStav = new Stav(nStav);

当我打电话时

pomStav.move(false);

nStav 的值将与 pomStav 一样变化...有人可以帮助我吗?我在代码中还有更多方法,但它太长了,所以我没有在这里复制像 findEmpty 等。

最佳答案

public Stav(Stav a){
this.pole = a.pole;
}

当您调用此方法时,当您将引用复制到对象时,底层的int[]极点在两个实例之间共享。不要复制引用,而是创建一个新数组并复制值:

public Stav( Stav a )
{
this.pole = new int[ a.pole.length ];
for( int i = 0; i < this.pole.length; ++i )
this.pole[ i ] = a.pole[ i ];
}

关于Java 复制构造函数和克隆不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26725075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com