BigInteger Konvertierung von int auf BigInteger
Ich habe Probleme beim arbeiten mit BigIntegers. Ich habe Probleme mit der add
- Methode in der Klasse Rational. In der Rational(int x, int y)
Konstruktor, den ich versuche zu konvertieren, die Parameter datatype int
in die Instanz-variable Datentyp BigInteger
obwohl die Nutzung dertoString(int n)
Methode.
- Mache ich die Umrechnung richtig im
Rational(int x, int y)
Konstruktor? - Sie Weg, die
add
Methode geschrieben, ich bin immer ein Fehler unter alle n.und num-n.den. Ich verstehe nicht, warum ich immer diesen Fehler. Bin ich nicht richtig mitadd
- Methode aus BigInteger-Klasse?
http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html
Angenommen eine Klasse hat die folgenden
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);
und die Rational-Klasse umfasst
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;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren eines int auf BigInteger würde ich
BigInteger.valueOf(int)
.Können Sie auch Operatoren mit BigIntegers verwenden, müssen Sie seine eigenen Methoden. Ihre methos sollte wie folgt sein:
add
Methode. Können Sie nicht verwenden, dass die Methode in diesem Fall? Wenn nicht, können Sie die BigIntegeradd
Methode mit this + val auf die Javadoc-Seite?BigInteger
Objekte. Verwenden Sie +, um zu addieren zweiint
s undadd()
hinzufügen von zweiBigInteger
s.Einem einfachen Fehler:
Auch beim erstellen eines neuen
BigInteger
sollten Sie dievalueOf(int)
- Methode anstelle der Umwandlung zuString
multiply
undadd
Methoden von BigInteger... habe ich aktualisiert meine Antwort.BigInteger.multiply()
.. Java nicht-operator überladen, Garrison schrieb "mentale Logik" oder im wesentlichen pseudo-code. Java keinen operator zu überladen.add
undmultiply
Methoden bei der Arbeit mitBigInteger
.Können Sie
Machen eine Zeichenfolge erste ist nicht erforderlich.
Ihre add-Methode ist falsch und es ist nicht klar, was Ihr versuchen zu erreichen, die in Ihrem add-Methode. Aber wenn Sie wollen, zu tun, außerdem in BigInteger, die Sie verwenden sollten BigInteger#hinzufügen - Methode und für die Multiplikation zwischen BigInteger, die Sie verwenden sollten BigInteger#multiplizieren Methode.
public toString(int n) { return toString(n); }
toString
- Methode, und verwenden Sie den in derInteger
Klasse - wienum = new BigInteger(Integer.toString(x));
wenn Sie wollte. Aber warum nicht einfachBigInteger.valueOf(x)
? Es ist viel aufgeräumter.return (n)
oderreturn (int n)
?Stoppen Sie die Nenner Sprengung exponentiell, würde ich die niedrigste gemeinsame Vielfache der beiden Nenner als Nenner für das Ergebnis, nicht Ihr Produkt. Dies würde wie folgt Aussehen.
Diese zu verwenden, genau so, wie ich geschrieben habe, brauchen Sie einen neuen Konstruktor, zwei
BigInteger
Argumente; aber Sie wahrscheinlich wollen Sie das sowieso nicht.