0

次のように、2 つの多項式を掛け合わせる方法を作成しています。

3x^5 * 2x^3 = 6x^8-> 係数が乗算され、指数が加算されます。

これに対する私のテストケースは次のようになります

@Test
public void times01() throws TError { 
    assertEquals(Term.Zero, Term.Zero.times(Term.Zero)); 
}

また、それを追加する必要があります。そのためTerm.Zero = (0,0)Term.Unit = (1,0)掛けたものTerm.ZeroTerm.Zeroすべて、掛けたものは事実上1でTerm.Unitあるため、それ自体を返します。Term.Unit

public Term times(Term that) throws CoefficientOverflow, ExponentOverflow, NegativeExponent {
    return null;
}

これがtimes方法です。timesメソッドのコーディングについて助けを求めていますか? 私が見つけた問題は、 と の 3 つの用語オブジェクトを処理する方法でTerm1ありTerm2Term3を無限に使用しないことですif-statements

4

1 に答える 1

0

これまでに、次の疑似コードを設計しました。

Term1 == Term.Zero OR Term2 == Term.Zero => Term3 = Term.Zero
Term1 == Term.Unit => Term3 = Term2
Term2 == Term.Unit => Term3 = Term1

Term1.coef * Term2.coef = Term3.coef
Term1.expo * Term2.expo = Term3.expo

次のコードで

@SuppressWarnings("null")
public Term times(Term that) throws CoefficientOverflow, ExponentOverflow, NegativeExponent {
    Term term1 = new Term(coef,expo);
    Term term2 = that;
    Term term3 = null;

    if(term1 == Zero || term2 == Zero) {
        term3 = Zero;
    } else if(term1 == Unit) {
        term3 = term2;
    } else if(term2 == Unit) {
        term3 = term1;
    } else if(term1.coef == 2 && term1.expo == 0) {
        term3.coef = term2.coef * 2;
        term3.expo = term2.expo;
    } else if(term2.coef == 2 && term2.expo == 0) {
        term3.coef = term1.coef * 2;
    term3.expo = term1.expo;
    } else {
        term3.coef = term1.coef * term2.coef;
        term3.expo = term1.expo + term2.expo;
    }



    return term3;
}

しかし、これにより、Term クラスの「coef/expo」変数を

final private int coef;

private int coef;

そして、これは次のテストでエラーを出します...

@Test
public void times09() throws TError { assertEquals(new Term(min,2), new Term(hmin,2).times(new Term(2,0))); }

何か案は?

于 2012-11-17T19:58:11.103 に答える