2016-10-05 5 views
-1

Ich habe diese Operation auf Papier geschrieben und es funktioniert gut. Ich weiß, dass Java die Ausführung von links nach rechts ist und der Vorrang ist so; */+ -.Java korrekte Reihenfolge der Operationen

Java gibt mir ein anderes Ergebnis, aber ich kann nicht herausfinden, warum.

public double overTimeWage() { 
    if (hours > 40) { 
     return (40 * baseRate) + (1.5 * baseRate) 
       * (hours - 40); 
    } else { 
     return 0; 
    } 

} 

Hier ist die Eingänge Ich

int hours = 50; 
double baseRate = 12; 

mit, wie es derzeit fort liefert 660, meine erwartete Rendite 180.

ist, ich weiß, dass dies die richtige mathematische Formel ist, weil i habe es auf Papier gemacht. und ich bekomme 180 davon.

+0

Was erwarten Sie, und was bekommen Sie? Welchen Stundenwert verwenden Sie auch, da alles von diesem Wert abhängt? Welches Debugging hast du auch gemacht? Hast du das mit einem Debugger gemacht? –

+0

Geben Sie ein Beispiel mit den Werten aller in der Berechnung verwendeten Variablen an und teilen Sie uns mit, wie Sie die erwarteten Ergebnisse berechnen. –

+0

Zu Ihren Diensten. Wir bitten Sie nur darum, diese Frage so schnell zu verbessern, dass sie beantwortbar ist, was wiederum von bereits bestehenden Bedingungen, erwarteten Ergebnissen und beobachteten Ergebnissen abhängt. Meine Voraussage ist, dass Ihre Annahmen von Vorbedingungen falsch sind. –

Antwort

1

660 ist der erwartete Rückgabewert. Ihr Problem ist, dass Sie ein überflüssiges Teil des Puzzles hinzugefügt haben.

Gemessen am Namen Ihrer Methode, overTimeWage, soll es die Anzahl der Überstunden des Arbeiters berechnen, die (overtimeMult * baseRate) * (hours - standardHours) ist. In Ihrem Fall, (1.5 * baseRate) * (hours - 40).

Die mathematischen Berechnungen gehen Sie wie folgt vor:

(1.5 * baseRate) * (hours - 40) 
(1.5 * 12  ) * (50 - 40) 
(18   ) * (10  ) 
18 * 10 
180 

Also haben wir die richtige Antwort, nicht wahr? Also warum gibt Ihre Methode 660 und nicht 180 zurück? Hier ist die Sache, Ihre Methode gibt (1.5 * baseRate) * (hours - 40) nicht zurück. Es gibt (40 * baseRate) + (1.5 * baseRate) * (hours - 40) zurück.

Sehen Sie das Problem? Sie geben die Überstunden nicht zurück. Sie geben ihre Einnahmen für den ganzen Tag zurück. Nur um klar zu sein, lassen Sie uns dies wieder zusammengesetzt:

(40 * baseRate) + (1.5 * baseRate) * (hours - 40) 

Wir wissen bereits, dass (1.5 * baseRate) * (hours - 40) = 180.

(40 * baseRate) + 180 
(40 * 12) + 180 
480 + 180 
660 

. Und da ist dein Problem. Es ist das klassische Problem des Codes zu tun, was Sie sagen es zu, nicht was Sie wollen es zu.

+0

Will vielleicht empfehlen, die Methode auf "getWage" umzubenennen, dann würde die "else" -Anweisung den Überstundenlohn zurückgeben –

+0

@ cricket_007 Nun, das könnte ein Weg sein, aber ich persönlich denke, es wäre besser Form zu haben zwei Methoden, eine für das Erhalten der Standardstunden-Einnahmen und eine für die Überstunden-Einnahmen, dann stellen Sie das in einer separaten getTotalWage-Methode zusammen. – BHustus

+0

Sicher, das ist eine andere, detailliertere Option. –

1

Wenn Sie nur die Überstunden wollen:

return (1.5 * baseRate) * (hours - 40); 

Die Art und Weise, die für Sie geschrieben, du bist die GESAMTE Pay Rückkehr, nicht nur die Überstunden.

Verwandte Themen