2017-09-15 4 views
0

Ich habe ein bisschen Schwierigkeiten dabei. Ich muss die regulären (40 Stunden) und Überstunden (> 40) meines Arbeiters in meiner Arbeiterklasse zusammen mit dem payTotal zurückgeben. Meine Worker-Klasse ist eine Unterklasse meiner Person-Klasse. Ich bin noch nicht ganz fertig, aber ich möchte wissen, ob ich mit dieser Klasse in die richtige Richtung gehe. Hier ist mein Code für meine aktuelle MethodeWie 3 Strings von einer Methode in Java zurückgegeben werden

String displayWeeklyPay(double hoursWorked){ 
    double overtime; 
    double regular; 
    String result; 
    if (hoursWorked <= 40) 
     { 
     payTotal = hourlyPayRate * hoursWorked; 
     regular = payTotal; 
     overtime = 0; 
     } 
    else{ 
     payTotal = (hourlyPayRate * 40) + ((hoursWorked - 40) * (hourlyPayRate * 1.5)); 
     regular = hourlyPayRate * 40; 
     overtime = ((hoursWorked - 40) * (hourlyPayRate * 1.5)); 
     } 
    String overT = String.valueOf(overtime); 
    String reg = String.valueOf(regular); 
    String totalPay = String.valueOf(payTotal); 

Uns wurde gesagt, diese Methode, um eine Zeichenfolge zurück, so dass ich nicht ganz sicher bin, wie ich zurückkommen würde. Ich habe einige Posts gesehen, die auf ein Array hindeuten, aber wenn ich diese Werte (regulär, overtime, paytotal) später an meinen Worker-Konstruktor übergeben muss, kann ich dann den Konstruktor dazu bringen, zwischen den drei Strings im Array zu unterscheiden? Danke

+0

Um mehr als 1 Sache zurückzugeben, müssen Sie alle Dinge in 1 Objekt stecken. Von welchem ​​Objekt man es hängt, hängt von vielen Dingen ab. Wenn sie stark miteinander verwandt sind und Sie einen festgelegten Betrag haben, können Sie eine Klasse mit Feldern für jedes Stück erstellen und dann eine Instanz der Klasse zurückgeben. Sie können sie auch einfach in eine Array/ArrayListe stecken und die Teile später aussortieren. – Carcigenicate

Antwort

3

Rückgabe eines Arrays mit drei String ist clumsy: nicht sinnvoll und fehleranfällig.

Sie sollten lieber eine benutzerdefinierte Klasse erstellen, die drei String-Felder besitzt und eine Instanz davon in Ihrer Methode zurückgibt.

Ihre Methode könnte so aussehen:

public MyResult displayWeeklyPay(double hoursWorked){ 

    ...  
    String overT = String.valueOf(overtime); 
    String reg = String.valueOf(regular); 
    String totalPay = String.valueOf(payTotal); 
    return new MyResult(overT, reg, totalyPay); 
} 

Wenn Sie mehr als drei Felder verwenden, einen Konstruktor ist wahrscheinlich nicht die beste Art und Weise, wie die Reihenfolge der übergebenen Argumente können fehleranfällig sein.
Ein Setter oder fließend Builder-Ansatz ist wahrscheinlich vorzuziehen.

+0

Mein Konstruktor für Worker verwendet super(), um den Konstruktor für Person aufzurufen, und geht dann und legt den Rest der Felder fest. Wegbeschreibung State, "displayWeeklyPay sollte die Anzahl der Stunden des regulären Gehalts (40) und die Summe und die Anzahl der Stunden der Überstunden zahlen und die Summe sowie die gesamte kombinierte Bezahlung." Ich sollte nicht unbedingt hart code/get und für jeden regulären, OT und Gesamtbetrag festlegen, denke ich nicht.Rufen Sie diese Methode einfach auf und lassen Sie sie jedes Mal zurückgeben –

2

Verschiedene Optionen:

  • einfache Rückkehr ein String a + "/" + b + "/" + c (schlechte Idee)
  • ein Array oder ein List<String>

Die Option empfohlen: Erstellen Sie eine bestimmte Klasse, dass „Wraps um "diese drei Werte. Und Ihre Methode gibt eine Instanz dieser Klasse zurück!

Aber für den Rekord: erstellen Sie nicht nur eine Klasse mit drei Feldern, die jeder andere lesen kann und schreiben zu. Setzen Sie die Feldwerte lieber über einen Konstruktoraufruf; und haben Getter Methoden, um ihren Inhalt zu holen.

0

Wenn der Rückgabetyp der Methode Zeichenfolge sein muss, dann wäre es nur möglich, sie mit einem Trennzeichen, wahrscheinlich einem Komma, zu verketten und dann nach Bedarf zu teilen. Dies sollte jedoch nur dann geschehen, wenn die Signatur der Methode nicht geändert werden kann. Wenn möglich, den Rückgabetyp zu ändern, der bevorzugt werden soll, indem ein Objekt oder ein Array von Strings zurückgegeben wird.

Verwandte Themen