У меня возникли проблемы с работой с BigIntegers. У меня возникают проблемы с методом add
в классе Rational. В конструкторе Rational(int x, int y)
я пытаюсь преобразовать параметры datatype int
в тип данных переменной экземпляра BigInteger
, хотя использование метода toString(int n)
.
BigInteger Преобразование из int в BigInteger
- Я правильно делаю преобразование внутри конструктора
Rational(int x, int y)
? - У них есть способ
add
. Я получаю сообщение об ошибке при всех n.num и n.den. Я не понимаю, почему я получаю эту ошибку. Я неправильно использую методadd
из класса BigInteger? http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html
Пусть один класс имеет следующий
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;
}
Спасибо! это работает. –
Будьте осторожны с этим. Если вы добавляете много Rationals вместе, знаменатели могут взорваться экспоненциально. Например, 1/5 + 1/5 + 1/5 + 1/5 даст вам 500/625, вместо 4/5. Вы действительно хотите добавить шаг для удаления любых общих факторов между числителем и знаменателем, прежде чем возвращать новое значение. –
@DavidWallace Я все еще смущен одной. Если вы посмотрите на страницу javadoc BigInteger, BigInteger использует метод 'add'. Не можете ли вы использовать этот метод в этом случае? Если нет, когда вы можете использовать метод BigInteger 'add' с этим + val на странице Javadoc? Http: //docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html# add (java.math.BigInteger) –