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()
とtemp
、aPolynomial
2 つの異なる値が得られます。
aPolynomial
ループhashCode
のすべての実行で同じです。for
コメントのいくつかの質問への回答:
Polynomial
私が関係する限り、どこからも継承しないので、super.clone()
参照しますObject
私には独自のtoString
方法があります。