在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)
总是得到不同值的输出。这意味着aPolynomial
get 在运行时的某个地方发生了变化。
更改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
方法。