Java和junit:多项式方法测试问题的派生
我正试图完成我的junit测试,以便找到多项式方法的导数,但我在使它工作时遇到了一些困难。方法如下:Java和junit:多项式方法测试问题的派生,java,junit,methods,derivative,Java,Junit,Methods,Derivative,我正试图完成我的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; } 下面是jun
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));
}
我不太清楚它为什么不起作用……我一遍又一遍地检查它,我知道我遗漏了一些东西。感谢大家提供的帮助,非常感谢。是否正确实现了
equals
方法?您的多项式
类是否实现了equals
否则将进行对象级比较。这意味着两个对象的指针必须匹配才能相等。必须实现equals
以显示多项式(a、b、c)
=多项式(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;
}
前两个答案暗示的是,如果多项式类没有实现equals(),那么您在测试中使用的是Object.equals()。Object.equals()检查p1.derivative()和p2是否是同一个对象(它们显然不是),以验证p1.derivative()和p2是否具有相同的值
通常的解决方案是实现多项式.equals(多项式rhs),这将确保每边上的三个MyDouble是相等的()。当然,您还必须确保MyDouble.equals(MyDouble rhs)做的事情是正确的。与您最初的问题无关:如果您还不熟悉检查浮点数是否相等很容易出错这一事实,您应该研究一下。例如,JScience类
多项式
具有正确的实现。