所以我寫了一個比較器來整理 Polynom 型別的物件(多項式,但基本上是在我的語言中)。當我用除錯器慢慢地迭代它時,我似乎得到了我期待的結果。然而,當我運行它時,其中一個失敗并在比較中回傳錯誤的值,這應該是非常直接的。
Polynom 物件如下:
public class Polynom<E> implements IPolynom<E> , Comparable<Polynom<E>>{
private SortedMap<Integer, FieldMember<E>> coefficients = new TreeMap<>();
而 IPolynom 只是一個定義方法的介面 E 可以是一個復數(我也寫過并包括它的方法和兩個欄位 real 和 image 但它與錯誤無關)
public int compareTo(Polynom<E> o) {
Polynom<E> p1 = new Polynom<>(this);
Polynom<E> p2 = new Polynom<>(o);
int deg,co;
while(!p1.coefficients.isEmpty() && !p2.coefficients.isEmpty())
{
deg = p1.degree() - p2.degree();
if(deg != 0)
return deg;
co = p1.getCoefficient(p1.degree()).compareTo(p2.getCoefficient(p2.degree()));
if(co != 0)
return co;
p1.coefficients.remove(p1.degree());
p2.coefficients.remove(p2.degree());
}
return (p1.degree() - p2.degree());
}
這是我撰寫的 compareTo 方法,并且方法 degree() 在這種情況下僅回傳 x 的度數,在此示例中從未達到系數部分,因此我會跳過它,正在比較的物件如下:
p1 = 多項式:(1.00 0.00i)x^5
p2 = 多項式:(-1.00-5.00i)x^7
比較應該是直截了當的,并表明 p2 大于 p1 但是當我運行時,當我除錯時回傳相反的結果(并且特別是在它們發生時迭代這些行)該方法回傳正確的結果。如果我在除錯時跳過它,它仍然會在我的主方法中回傳錯誤的結果,我將一堆 Polynom 型別的物件添加到 SortedSet 中,結果證明僅在單個物件上的排序是錯誤的(在這種情況下是 p1這應該是它們中“最小的”并且在排序集中排在第一位)我在這里真的很茫然......
請告訴我是否有任何其他細節需要補充,這會使情況更清楚,因為這是一個相當大的專案
ps所有這些都是在eclipse中完成的(沒有任何擴展)
uj5u.com熱心網友回復:
我的錯誤是.toString()改變了物件的狀態,所以除錯器沒有講述整個故事。
非常感謝伙計們!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/388391.html
上一篇:SQL回圈未設定其中一個值
下一篇:使用通配符轉換泛型類的類實體
