0

BigInteger の操作に問題があります。addRational クラスのメソッドに問題があります。コンストラクターでは、メソッドを使用して、パラメーターのデータ型をインスタンス変数のデータRational(int x, int y)型に変換しようとしています。intBigIntegertoString(int n)

  1. Rational(int x, int y)コンストラクター内で正しく変換していますか?
  2. メソッドの書き方addでは、n.num と n.den のすべてでエラーが発生します。なぜそのエラーが発生するのかわかりません。addBigInteger クラス のメソッドを正しく使用していませんか? http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html

1 つのクラスに次があるとします。

Rational a = new Rational(1,2);
Rational b = new Rational(1,3);
Rational c = new Rational(1,6);
Rational sum = a.add(b).add(c);
println(sum);

Rational クラスには以下が含まれます

import acm.program.*;
import java.math.*;

public class Rational{

    public Rational(int x, int y) {
        num = new BigInteger(toString(x));
        den = new BigInteger(toString(y));
    }

    public toString(int n) {
        return toString(n); 
    }

    public BigInteger add(BigInteger n) {
        return new BigInteger(this.num * n.den + n.num * this.den, this.den *  n.den)
    }

    /*  private instance variables  */
    private BigInteger num; 
    private BigInteger den;
}
4

4 に答える 4

4

int を BigInteger に変換するには、 を使用しますBigInteger.valueOf(int)

また、BigIntegers で演算子を使用することはできません。独自のメソッドを使用する必要があります。メソッドは次のようになります。

public Rational add(Rational n) {
    return new Rational(
             this.num.multiply(n.den).add(n.num.multiply(this.den)).intValue(),
             this.den.multiply(n.den).intValue());
}
于 2013-08-28T02:10:00.297 に答える
3

1) Rational(int x, int y) コンストラクター内で変換を正しく行っていますか?

使用できます

BigInteger num = BigInteger.valueOf(x);

最初に String を作成する必要はありません。

2. They way the add method is written I'm getting an error .....

add メソッドが間違っており、 add メソッドで何を達成しようとしているのかが明確ではありません。ただし、BigInteger で加算を行いたい場合はBigInteger#addメソッドを使用し、BigInteger 間の乗算にはBigInteger#multiplyメソッドを使用する必要があります。

于 2013-08-28T02:06:24.703 に答える
2

単純なエラー:

public Rational add(Rational n) {
    return new Rational(
        this.num.multiply(n.den).add(n.num.multiply(this.den)),
        this.den.multiply(n.den));
}

また、新しいものを作成するときは、に変換する代わりにメソッドBigIntegerを使用する必要がありますvalueOf(int)String

于 2013-08-28T02:06:17.800 に答える
1

分母が指数関数的に爆発するのを止めるために、2 つの分母の最小公倍数を結果の分母として使用し、それらの積ではありません。これは次のようになります。

public Rational add(Rational rhs) {
    BigInteger commonFactor = den.gcd(rhs.den);
    BigInteger resultNumerator = 
        num.multiply(rhs.den).add(rhs.num.multiply(den)).divide(commonFactor);
    BigInteger resultDenominator = den.multiply(rhs.den).divide(commonFactor);

    return new Rational(resultNumerator, resultDenominator);
}

これを私が書いたとおりに使用するには、2 つのBigInteger引数を取る新しいコンストラクターが必要です。しかし、とにかくそれが必要な場合があります。

于 2013-08-28T02:40:14.393 に答える