Verfahren max() ist vom Typ Rational, so es wird ein Rational Objekt zurückzukehren (und das ist, warum es nicht einen Doppel Wert zurückgeben kann). float1 und float2 sind das Ergebnis Nenner/Zähler die Rational Variablen der Klasse sind. Sie möchten überprüfen, welche Rational-Nummer größer ist. Dazu sollten Sie nicht das Ergebnis der Division, sondern die Zahlen selbst zurückgeben. Und in diesem Programm eine rationale Zahl wird von einem Objekt Rational Klasse dargestellt. Wenn also die rationale Zahl r ist größer als die aktuelle rationale Zahl (das heißt das Rational Objekt, das die Instanzmethode max() nennt), dann würden Sie r zurückkehren. Andernfalls würden Sie das aktuelle Objekt zurückgeben. Um das zu tun, ändern Sie einfach die if-else Anweisung in der Definition von max() in die unten.
Ich möchte auch, dass Sie eine weitere Sache beachten. Im Falle der Variablen Zähler und Nenner der Klasse Rational sind vom Typ int, tun dann die Aufteilung auf diese Weise ändern:
double float1 = (double)numerator/(double)denominator;
und auch
double float2 = (double)r.getNumerator()/(double)r.getDenominator();
, wenn die Methoden getNumerator() und getDenominator() sind auch vom Typ int. Dies geschieht, um die Division von zwei ganzen Zahlen zu vermeiden, denn wenn dies geschieht, wird der Bruchteil des Ergebnisses ignoriert und das Ergebnis wird ebenfalls eine ganze Zahl sein. Also, 0,00125 schalten auf und wenn beide float1 und float2 werden , dann werden Sie einen Laufzeitfehler in dem max geworfen get(), das besagt, dass kein Wert zurückgegeben wird.
Hoffe, dass Sie meine Erklärung verstehen.
EDIT: Ich schrieb ein Beispielprogramm, das Sie besser zu verstehen, das Konzept helfen könnte. Click here to see the program
Ihre erste Methode erwartet, dass Sie eine Rational zurückgeben, Sie möchten, dass es eine doppelte – user1875195
Alles, was ich sehe, sind Schwimmer.Warum schreibst du keine rationale Abstraktion? Entschuldigung, das ist irrational. – duffymo
Danke, ich fühle mich wie ein Idiot – Justin