私の目的は、拡張子と呼ばれる 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;
}