0

Ich habe eine Aufgabe, die nach allem fragt, was ich im folgenden Code habe. Das alles funktioniert gut - ich muss nur die monatlichen Stunden über 160 Stunden berechnen, um sie mit dem 1,5-fachen des normalen Stundensatzes zu bezahlen. Meine Mathematik scheint solide und berechnet gut:

((Stunden - 160) * Überstunden) + (160 * Stundensatz)

Aber ich weiß nicht, ob ich diese if-Anweisung in die richtige Methode setze oder ob es überhaupt eine if-Anweisung sein sollte. Meine Methoden zum Erhöhen / Verringern der Bezahlung funktionieren zuvor und müssen beibehalten werden. Ich habe einige Dinge entfernt, damit sie leichter zu lesen sind.

HourlyWorker Class:

public class HourlyWorker extends Employee
{
private int hours;
private double hourlyRate;
private double monthlyPay;
private double overtime = (1.5 * hourlyRate);

public HourlyWorker(String last, String first, String ID, double rate)
{
   super(last, first, ID);
   hourlyRate = rate;
}

public void setHours(int hours)
{
   this.hours = hours;
}

public int getHours()
{
   return hours;
}

public void setHourlyRate(double rate)
{
   this.hourlyRate = rate;
}

public double getHourlyRate()
{
   return hourlyRate;
}


public double getMonthlyPay()
{
   if (hours > 160)
   {
      monthlyPay = ((hours - 160) * overtime) + (160 * hourlyRate);
   }
   else 
   {
      monthlyPay = hourlyRate * hours;
   }
   return monthlyPay;
}

public void increasePay(double percentage)
{
   hourlyRate *= 1 + percentage / 100;
}

public void decreasePay(double percentage)
{
   hourlyRate *= 1 - percentage / 100;
}

}
What I'm testing with:

public class TestEmployee2
{
   public static void main(String[] args)
   {
   Employee [] staff = new Employee[3];
      HourlyWorker hw1 = new HourlyWorker("Bee", "Busy", "BB1265", 10);
       
      hw1.setHours(200);    
      staff[0] = hw1;

   System.out.println(staff[0].getMonthlyPay());
   staff[0].increasePay(10);
   System.out.println(staff[0].getMonthlyPay());
}
}

Die Ausgabe beträgt: 1600 (anfängliche monatliche Rate mit 40 Überstunden und 160 regulären Stunden) 1760 (10% Erhöhung des monatlichen Gehalts)

Sollte sein: 2006 2206.6

0
user14267810 8 Okt. 2020 im 07:41

3 Antworten

Beste Antwort

Du bist fast da. Für die set() Methode müssen Sie die Position als erstes Argument public E set(int index, E element) hinzufügen:

this.artists.set(0, new Artist(artist, genre));    // this should work
1
oleg.cherednik 8 Okt. 2020 im 04:48

Verwenden Sie zum Aktualisieren eines Objekts in einer ArrayList die Methode set

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#set-int-E-

Dies erfordert zwei Argumente, das index und das neue Objekt.

Informationen zum Abrufen von index finden Sie unter https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#indexOf-java.lang.Object-

0
Scary Wombat 8 Okt. 2020 im 04:45

Angenommen, Sie haben der Liste folgende Künstler hinzugefügt:

new Artist("Rolling Stones", "Rock");
new Artist("Abba", "Rock");  

Jetzt möchten Sie, dass Ihre addArtists -Methode das Genre eines Künstlers tatsächlich aktualisiert, wenn sie erneut hinzugefügt wurden. Sie können dies folgendermaßen tun:

( Ich gehe auch davon aus, dass this.artists ein Collection. )

public void addArtist(String artistName, String genre) {
    this.artists.removeIf((artist) -> artist.name.equals(artistName)));
    this.artists.add(new Artist(artistName, genre));
}

Die Methode wird zuerst entfernt (mithilfe von removeIf) Jeder Künstler mit diesem Namen aus der Liste fügt dann den neuen Künstler hinzu.


Wenn Sie jetzt:

artists.addArtist("Rolling Stones", "Rock");
artists.addArtist("Abba", "Pop");

Die vorherigen Künstler, die Sie hinzugefügt haben, werden durch diese ersetzt

0
smac89 8 Okt. 2020 im 05:01