2. Kontrolle - nur zulässige Werte

In diesem Abschnitt wollen wir 2 logische Fehler im Programm korrigieren:

  • Das Zurücksetzen des km-Standes soll nicht mehr möglich sein.
  • Das Fahren einer negativen Strecke soll nicht mehr möglich sein.

Klasse Kfz

Methode setKmStand()

Diese Methode - also der Setter für das Attribut kmStand - soll keine Verkleinerung des km-Stands mehr zulassen. Dazu wird mit einer if-else-Verzweigung geprüft, ob der neue Parameter-Wert kleiner ist als der vorhandene Wert des Attributs. Wenn ja, erfolgt eine Fehlermeldung, wenn nicht, wird die Anweisung akzeptiert.

public void setKmStand(int kmStand) {
  if (this.kmStand > kmStand) {
    System.out.println(this.marke + " - km-Stand zurueckstellen ist NICHT ERLAUBT!");
  }
  else {
    this.kmStand = kmStand; 
  }
}

Methode fahre()

In dieser Methode sollen negative Werte für den Parameter strecke verhindert werden.

Dazu nutzen wir einfach die gerade korrigierte Setter-Methode setKmStand(). Wenn der Parameter negativ ist, dann ist die Summe this.kmStand + strecke kleiner als this.kmStand, und die Setter bricht mit einer Warnmeldung ab.

public void fahre(int strecke) {
  System.out.println("---------------------------------");
  System.out.println("Fahrtvorgang " + this.marke + ":");
  
  System.out.println("Geplante Fahrtstrecke : " + strecke + " km");
  
  setKmStand(this.kmStand + strecke);
  
  System.out.println("neuer Km-Stand        : " + this.kmStand + " km");
}

Klasse Verkehr

Die Klasse Verkehr wird nicht verändert.

public class Verkehr {  
  public static void main(String[] args) {
    Kfz kfz1 = new Kfz("VW"); 
    Kfz kfz2 = new Kfz("BMW");
    
    kfz1.fahre(78);
    kfz2.fahre(220);
    kfz1.fahre(23);    
    kfz2.fahre(65);
    
    System.out.println();
    System.out.println("Versuchte Manipulation des km-Stands:");
    kfz2.setKmStand(100);
    
    System.out.println();
    System.out.println("Aktuelle km-Staende:");
    System.out.println(kfz1.getMarke() + ": " + kfz1.getKmStand() + " km");
    System.out.println(kfz2.getMarke() + ": " + kfz2.getKmStand() + " km"); 
    
    kfz1.fahre(-70);      
  }
}

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

---------------------------------
Objekterstellung VW
---------------------------------
Objekterstellung BMW
---------------------------------
Fahrtvorgang VW:
Geplante Fahrtstrecke : 78 km
neuer Km-Stand        : 78 km
---------------------------------
Fahrtvorgang BMW:
Geplante Fahrtstrecke : 220 km
neuer Km-Stand        : 220 km
---------------------------------
Fahrtvorgang VW:
Geplante Fahrtstrecke : 23 km
neuer Km-Stand        : 101 km
---------------------------------
Fahrtvorgang BMW:
Geplante Fahrtstrecke : 65 km
neuer Km-Stand        : 285 km

Versuchte Manipulation des km-Stands:
BMW - km-Stand zurueckstellen ist NICHT ERLAUBT!

Aktuelle km-Staende:
VW: 101 km
BMW: 285 km
---------------------------------
Fahrtvorgang VW:
Geplante Fahrtstrecke : -70 km
VW - km-Stand zurueckstellen ist NICHT ERLAUBT!
neuer Km-Stand        : 101 km

Ziel erreicht: Beide problematischen Anweisungen (kfz2.setKmStand(100)und kfz1.fahre(-70) werden nicht ausgeführt, und man erhält eine Warnmeldung.