5. Kontrolle für den km-Stand

In der Methode fahre() muss ein Kontrollmechanismus eingebaut werden: Wenn die geplante Fahrtstrecke zu lang ist (also das Benzin nicht ausreicht), darf das Attribut kmStand nicht aktualisiert werden.

Außerdem soll eine passende Warnmeldung ausgegeben werden, wenn die Methode fahre() einen negativen Wert als Parameter erhält.

Die Methode maxStrecke()

In der Methode fahre() wird die Information benötigt, wie lang die maximal mögliche Strecke ist, die mit dem aktuellen Benzin - also tankAktuell - noch gefahren werden kann.

Dafür schreiben wir die kleine Hilfsmethode maxStrecke(), die genau diesen Wert zurückgibt. Die Formel dafür lautet:
Maximalstrecke = Tankstand (Liter) / Verbrauch (Liter/100km)100

Da hier je nach Tankstand auch Nachkommastellen herauskommen können, ist der Rückgabetyp double.

public double maxStrecke() {
  return this.tankAktuell / this.verbrauch * 100;
}

Die Methode fahre()

Als erstes ergänzen wir die maximale Fahrtstrecke in der Konsolenausgabe am Anfang. Dazu nutzen wir die Methode maxStrecke().

Dann werden in einer if - else if - else -Konstruktion 2 Fälle getestet:

  • wenn die maximal mögliche Strecke kleiner ist als die geplante Strecke, wird eine Warnung "zu wenig Benzin" ausgegeben.
  • wenn die geplante Strecke kleiner als 0 ist, wird eine Warnung "negative Strecken sind nicht erlaubt" ausgegeben.

Nur wenn diese beiden Bedingungen nicht wahr sind, werden die Attribute kmStand und tankAktuell über ihre Setter-Methoden aktualisiert.

public void fahre(int strecke) {
  System.out.println("---------------------------------");
  System.out.println("Fahrtvorgang " + this.marke + ":");
  
  System.out.println("Tankstand             : " + this.tankAktuell + " Liter");
  System.out.println("Maximale Fahrtstrecke : " + maxStrecke() + " km");
  System.out.println("Geplante Fahrtstrecke : " + strecke + " km");
  System.out.println("Streckenverbrauch     : " + streckenVerbrauch(strecke) + " Liter");
  
  if (maxStrecke() < strecke) {
    System.out.println("FAHRTVORGANG NICHT MOEGLICH: zu wenig Benzin");
  }
  else if (strecke < 0) {
    System.out.println("FAHRTVORGANG NICHT MOEGLICH: negative Strecken sind nicht erlaubt.");
  }
  else {
    setKmStand(this.kmStand + strecke);
    setTankAktuell(this.tankAktuell - streckenVerbrauch(strecke));
    
    System.out.println("neuer Km-Stand        : " + this.kmStand + " km");
    System.out.println("neuer Tankstand       : " + this.tankAktuell + " Liter");
  }
}

Klasse Verkehr

In der Klasse Verkehr wird ein Kfz-Objekt erzeugt. An diesem werden mehrfach die Methoden tanke() und fahre() aufgerufen.

public class Verkehr {  
  public static void main(String[] args) {
    Kfz kfz1 = new Kfz("VW", 55, 6.5); 
    
    kfz1.tanke(50);
    kfz1.fahre(320);
    kfz1.fahre(600);
    
    kfz1.tanke(20);
    kfz1.fahre(600);
    
    kfz1.fahre(-50);    
  }
}

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

---------------------------------
Objekterstellung VW
(55 Liter-Tank, Verbrauch 6.5 Liter auf 100 km)
---------------------------------
Tankvorgang VW:
Maximale Tankmenge    : 55.0 Liter
Gewuenschte Tankmenge : 50 Liter
Getankt               : 50 Liter
neuer Tankstand       : 50.0 Liter
---------------------------------
Fahrtvorgang VW:
Tankstand             : 50.0 Liter
Maximale Fahrtstrecke : 769.2307692307693 km
Geplante Fahrtstrecke : 320 km
Streckenverbrauch     : 20.8 Liter
neuer Km-Stand        : 320 km
neuer Tankstand       : 29.2 Liter
---------------------------------
Fahrtvorgang VW:
Tankstand             : 29.2 Liter
Maximale Fahrtstrecke : 449.2307692307692 km
Geplante Fahrtstrecke : 600 km
Streckenverbrauch     : 39.0 Liter
FAHRTVORGANG NICHT MOEGLICH: zu wenig Benzin
---------------------------------
Tankvorgang VW:
Maximale Tankmenge    : 25.8 Liter
Gewuenschte Tankmenge : 20 Liter
Getankt               : 20 Liter
neuer Tankstand       : 49.2 Liter
---------------------------------
Fahrtvorgang VW:
Tankstand             : 49.2 Liter
Maximale Fahrtstrecke : 756.923076923077 km
Geplante Fahrtstrecke : 600 km
Streckenverbrauch     : 39.0 Liter
neuer Km-Stand        : 920 km
neuer Tankstand       : 10.200000000000003 Liter
---------------------------------
Fahrtvorgang VW:
Tankstand             : 10.200000000000003 Liter
Maximale Fahrtstrecke : 156.92307692307696 km
Geplante Fahrtstrecke : -50 km
Streckenverbrauch     : -3.25 Liter
FAHRTVORGANG NICHT MOEGLICH: negative Strecken sind nicht erlaubt.
  • Zuerst werden 50 Liter getankt.
  • Die erste Fahrt (320 km) wird wie gewünscht durchgeführt.
  • Die zweite Fahrt (600 km) ist NICHT MOEGLICH, weil die geplante Fahrtstrecke zu lang ist.
  • Deswegen werden noch einmal 20 Liter getankt.
  • Nun ist die Fahrt von 600 km doch möglich.
  • Der letzte Fahrtversuch mit einer Minus-Fahrtstrecke wird nun korrekterweise abgelehnt.

Die Klasse Kfz ist nun (für die Zwecke dieses Projektes) fertig!
(Eine winzige Änderung kommt aber noch im nächsten Abschnitt.)

Die merkwürdige Zahl 10.200000000000003 für den Tankstand (tankAktuell) in den letzten 2 Fahrtvorgängen kommt durch Rundungsfehler im Computer zustande. Mathematisch korrekt wäre 10.2. Spielt hier aber keine Rolle.