3. Die Methode tanke()

Unsere Kfz-Objekte sollen auch Benzin tanken können. Dazu erstellen wir in der Klasse Kfz 2 neue Attribute, die  zugehörigen Setter und Getter und die Methode fahre().

Klasse Kfz

Attribute

Das Attribut tankMax wird die maximal mögliche Benzin-Menge (in Liter) des Kfz-Objekts gespeichert, also das Volumen des Tanks. Das Attribut tankAktuell speichert die aktuell im Tank befindliche Benzinmenge (in Liter). Beide Attribute sollen int-Werte speichern.

Damit sieht die Attributliste so aus:

private String marke;
private int kmStand; 
private int tankMax;
private int tankAktuell;

Konstruktor

Im Konstruktor wird das Tankvolumen (tankMax) als Parameter ergänzt und dem Attribut zugewiesen. tankAktuell wird auf 0 gesetzt, das heißt, man erzeugt ein neues Kfz-Objekt immer mit leerem Tank.

In der letzten Anweisung wird die Information zum Tankvolumen ergänzt.

public Kfz(String marke, int tankMax) {  
  this.marke = marke;
  this.kmStand = 0;
  this.tankMax = tankMax;
  this.tankAktuell = 0;     
  
  System.out.println("---------------------------------");
  System.out.println("Objekterstellung " + this.marke);
  System.out.println("(" + tankMax + " Liter-Tank)");
}

Setter und Getter

Für die neuen Attribute werden die Getter- und Setter-Methoden ergänzt. tankMax (das Volumen des Tanks eines Fahrzeugs) soll nicht mehr geändert werden, erhält also nur einen Getter. tankAktuell erhält auch einen Setter. Dieser nimmt aber nur Werte für tankAktuell an, die zwischen 0 und dem Wert von tankMax liegen.

public int getTankMax() {
  return this.tankMax;
}

public int getTankAktuell() {
  return this.tankAktuell;
}

public void setTankAktuell(int tankAktuell) {
  if (tankAktuell >= 0 && tankAktuell <= tankMax) {
    this.tankAktuell = tankAktuell;
  }
}

Die Methode tanke()

Die Methode erhält einen Parameter tankmenge vom Typ int (= die Benzinmenge in Liter, die getankt werden soll).

Zunächst wird berechnet, wieviel Liter noch in den Tank hineinpassen, also die Differenz von tankMax und tankAktuell. Der Wert wird in der lokalen Variablen platzImTank gespeichert.

Dann wird kontrolliert, ob die gewünschte Tankmenge zu groß ist. Wenn ja, wird eine Warnmeldung ausgegeben und der Tankvorgang wird nicht ausgeführt. Wenn nicht, wird tankmenge zum Attribut tankAktuell addiert und der neue Tankstand auf der Konsole ausgegeben.

public void tanke(int tankmenge) {
  System.out.println("---------------------------------");
  System.out.println("Tankvorgang " + this.marke + ":");
  
  int platzImTank = this.tankMax - this.tankAktuell;
  
  System.out.println("Maximale Tankmenge    : " + platzImTank + " Liter");
  System.out.println("Gewuenschte Tankmenge : " + tankmenge + " Liter");
  
  if (platzImTank < tankmenge) {
    System.out.println("TANKVORGANG NICHT MOEGLICH: Tank ist zu voll.");
  }
  else {
    this.tankAktuell += tankmenge;
    System.out.println("Getankt               : " + tankmenge + " Liter");
    System.out.println("neuer Tankstand       : " + this.tankAktuell + " Liter");
  }
}

Klasse Verkehr

Die Klasse Verkehr wird angepasst, um die neue Methode auszuprobieren. Es wird nur ein Kfz-Objekt erstellt, an dem 3 mal die Methode tanke() aufgerufen wird.

public class Verkehr {  
  public static void main(String[] args) {
    Kfz kfz1 = new Kfz("VW", 55); 
    
    kfz1.tanke(20);
    kfz1.tanke(30);
    kfz1.tanke(10);
    
    System.out.println();
    System.out.println("Der aktuelle Tankstand betraegt " + kfz1.getTankAktuell() + " Liter.");    
  }
}

Ausführen der Klasse Verkehr führt zur Konsolenausgabe:

---------------------------------
Objekterstellung VW
(55 Liter-Tank)
---------------------------------
Tankvorgang VW:
Maximale Tankmenge    : 55 Liter
Gewuenschte Tankmenge : 20 Liter
Getankt               : 20 Liter
neuer Tankstand       : 20 Liter
---------------------------------
Tankvorgang VW:
Maximale Tankmenge    : 35 Liter
Gewuenschte Tankmenge : 30 Liter
Getankt               : 30 Liter
neuer Tankstand       : 50 Liter
---------------------------------
Tankvorgang VW:
Maximale Tankmenge    : 5 Liter
Gewuenschte Tankmenge : 10 Liter
TANKVORGANG NICHT MOEGLICH: Tank ist zu voll.

Der aktuelle Tankstand betraegt 50 Liter.

Die ersten beiden Tankvorgänge werden wie gewünscht ausgeführt. Der dritte Tankvorgang erzeugt eine Fehlermeldung, weil 10 Liter getankt werden sollen, aber nur noch 5 Liter in den Tank hineinpassen.

Der Aufruf des Getters (kfz1.getTankAktuell()) zum Schluss zeigt dann auch, dass tankAktuell nach dem zweiten Tankvorgang nicht mehr verändert wurde.