2016-04-05 3 views
-6
public Rational max (Rational r) 
{ 
    double float1 = numerator/denominator; 
    double float2 = r.getNumerator()/r.getDenominator(); 
    if (float1>float2) 
    return float1; 
    else 
    return float2; 
} 

public double floatvalue(Rational r) 
{ 
    double den = denominator * r.getDenominator(); 
    double num = numerator * r.getDenominator() + r.getNumerator() * denominator; 
    return num/den; 
} 

Meine zweite Methode (floatvalue) erlaubt es mir num/den zurückkehren, obwohl sie doppelt Variablen sind. Allerdings lasse ich float1 oder float2 nicht zurück, weil sie doppelte Werte sind. Irgendeine Idee warum das ist?Warum kann ich keine rationale Zahl aus dem Verfahren in diesem Java-Programm zurückkehren?

+3

Ihre erste Methode erwartet, dass Sie eine Rational zurückgeben, Sie möchten, dass es eine doppelte – user1875195

+1

Alles, was ich sehe, sind Schwimmer.Warum schreibst du keine rationale Abstraktion? Entschuldigung, das ist irrational. – duffymo

+0

Danke, ich fühle mich wie ein Idiot – Justin

Antwort

0

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

Verwandte Themen