在java中有以下代码
public Polynomial multiply(Polynomial aPolynomial){
Polynomial ret = new Polynomial();
for (Tuple i: this.pol){
Polynomial temp = aPolynomial.clone();
System.out.print(temp);
for (Tuple j: temp.pol){
j.setCoef(j.getCoef() * i.getCoef());
j.setPower(j.getPower() + i.getPower());
}
ret = ret.add(temp).clone();
}
return ret;
}
我System.out.print(temp)总是得到不同值的输出。这意味着aPolynomialget 在运行时的某个地方发生了变化。
更改Polynomial temp = aPolynomial.clone();为:
LinkedList<Tuple> list1 = (LinkedList<Tuple>) aPolynomial.pol.clone();
Polynomial temp = new Polynomial(list1);
在每次循环运行时输出System.out.print(temp)也不同。
我的错误在哪里?
编辑:
public Polynomial clone() {
try {
return (Polynomial)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
打印hashCode()oftemp和aPolynomial确实会产生两个不同的值。
aPolynomial在循环hashCode的每次运行中都有相同的。for
评论中一些问题的答案:
因为Polynomial不从任何地方继承,就我而言,我super.clone()会提到Object
我有我自己的toString方法。