2

多項式法の導関数を見つけるための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));
 }

なぜそれが機能しないのかよくわかりません... 何度も何度も繰り返して、何かが足りないことを知っています。助けてくれてありがとう、感謝します

4

3 に答える 3

3

前の 2 つの回答が示唆しているのは、Polynomial クラスが equals() を実装していない場合、テストで Object.equals() を使用していることです。Object.equals() は、p1.derivative() と p2 が同じ値であることを確認するときに、p1.derivative() と p2 が同じオブジェクトであることを確認しています (明らかにそうではありません)。

通常の解決策は、Polynomial.equals(Polynomial rhs) を実装することです。これにより、両側の 3 つの MyDoubles が equals() になるようになります。もちろん、 MyDoubles.equals(MyDouble rhs) が正しいことを行うことも確認する必要があります。

于 2010-03-30T20:51:54.107 に答える
0

メソッドはequals正しく実装されていますか?

于 2010-03-30T20:45:25.090 に答える
0

あなたのPolynomialクラスは実装していますequalsか?

それ以外の場合は、オブジェクト レベルの比較になります。つまり、2 つのオブジェクトのポインターが等しくなるためには一致する必要があります。==equalsの値を示すために実装する必要があります。Polynomial(a, b, c)Polynomial(d, e, f)

Polynomial のデータ構造が何であるかはわかりませんが、次のようにします。

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;
}
于 2010-03-30T20:46:26.893 に答える