2010-03-30 49 views
2

即時嘗試完成我的junit測試以找到多項式方法的派生方法,並且在工作中遇到一些麻煩。這裏是方法:Java和junit:多項式方法測試問題的衍生

public Polynomial derivative() { 
    MyDouble a = new MyDouble(0); 
    MyDouble b = this.a.add(this.a); 
    MyDouble c = this.b; 
    Polynomial poly = new Polynomial (a, b, c); 
    return poly; 
} 

,這裏是JUnit測試:

public void testDerivative() { 
    MyDouble a = new MyDouble(2), b = new MyDouble(4), c = new MyDouble(8); 
    MyDouble d = new MyDouble(0), e = new MyDouble(4), f = new MyDouble(4); 

    Polynomial p1 = new Polynomial(a, b, c); 
    Polynomial p2 = new Polynomial(d,e,f); 
    assertTrue(p1.derivative().equals(p2)); 
} 

即時通訊也不太清楚爲什麼它不是工作...香港專業教育學院上了一次又一次,我知道我在想念的東西。感謝大家給予的任何幫助,感謝

+0

與您原來的問題無關:如果您不熟悉檢查浮點數是否相等的事實很容易出錯,那麼您應該查看它。 – VoiceOfUnreason 2010-03-30 20:56:33

回答

0

equals方法是否正確實施?

0

您的Polynomial類實施equals

否則,它將進行對象級比較。這意味着兩個對象的指針必須匹配才能相等。您必須執行equals以顯示Polynomial(a, b, c) == Polynomial(d, e, f)的值。

我不知道多項式的數據結構是什麼,但你會做這樣的事情:

public boolean equals(Polynomial p) 
{ 
    // where a b and c are private MyDouble variables 
    if (p.a == this.a && p.b == this.b && p.c == this.c) 
     return true; 
    else 
     return false; 
} 
3

前兩個答案在在於,如果多項式類不實現暗示什麼equals(),那麼你在測試中使用Object.equals()。當你想驗證p1.derivative()和p2具有相同的值時,Object.equals()正在檢查p1.derivative()和p2是否是同一個對象(它們顯然不是)。

通常的解決方案是實現Polynomial.equals(Polynomial rhs),它可以確保每個邊上的三個MyDoubles都是equals()。當然,你還必須確保MyDoubles.equals(MyDouble rhs)做正確的事情。

+1

例如,_JScience_類'Polynomial'具有正確的實現。 http://jscience.org/api/org/jscience/mathematics/function/Polynomial.html – trashgod 2010-03-31 00:24:32