0

私の目的は、拡張子と呼ばれる int をパラメーターとして受け取るメソッド stackSize を含むクラス Stacker を提供することです。シーケンス 1/2 + 1/4 + 1/6 + 1/8 + ... + ... + 1/2n の合計が extension 以上になるような最小の long n を返す必要があります。

Rat クラス (Rational Number) が、最初のパラメーターを分子として、2 番目のパラメーターを分母として使用して 2 つの分数を正しく加算すると仮定すると、このコードが機能しない理由はありますか?

デフォルトの Rat() コンストラクターは単純に有理数 (0/1) を作成し、Rat(extension) コンストラクターは有理数 (extension/1) を作成します。

public class StackerTest {

@Test
public void test1()
{
    assertEquals(4, Stacker.stackSize(1));
}

}

テストケースを実行すると:

@Test
    public void test1()
    {
        assertEquals(4, Stacker.stackSize(1));
    }

IllegalArgumentException を与える前に、しっかりと 30 秒間実行されます。

Rat クラスのコンストラクターと add メソッドを次に示します。

/**
     * If d is zero, throws an IllegalArgumentException. Otherwise creates the
     * rational number n/d
     */
    public Rat (int n, int d)
    {
        // Check parameter restriction
        if (d == 0)
        {
            throw new IllegalArgumentException();
        }

        // Adjust sign of denominator
        num = n;
        den = d;
        if (den < 0)
        {
            num = -num;
            den = -den;
        }

        // Zero has a standard representation
        if (num == 0)
        {
            den = 1;
        }

        // Factor out common terms
        int g = gcd(Math.abs(num), den);
        num = num / g;
        den = den / g;
    }

    /**
     * Returns the sum of this and r
     */
    public Rat add (Rat r)
    {
        int firstNum = this.num*r.den;
        int firstDen = this.den*r.den;
        int secondNum = r.num*this.den;
        int secondDen = r.den*this.den;
        Rat x = new Rat(firstNum+secondNum, firstDen);
        return x;
    }
4

0 に答える 0