2010-03-30 45 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