7. Kontrolle - nur zulässige Werte

Wir werden nun - wie zuvor bei den Kfz-Methoden tanke() und fahre() - Kontrollstrukturen in der Klasse Pkw einbauen, so dass nur sinnvolle Werte möglich sind:

  • Der Wert des Attributs mitfahrer darf nicht größer sein als der Wert des Attributs sitzplaetze.
  • Der wert des Attributs mitfahrer darf nicht negativ sein.

Bei ungültigen Eingaben sollen passende Warnmeldungen ausgegeben werden.

Klasse Pkw

Methode setMitfahrer()

Zunächst wird der Setter so geändert, dass nur Werte zwischen 0 und dem Wert von sitzplaetze akzeptiert werden.

public void setMitfahrer(int mitfahrer) {
  if (mitfahrer >= 0 && mitfahrer <= this.sitzplaetze) {
    this.mitfahrer = mitfahrer;
  }
}

Die Methode einsteigen()

In der Methode einsteigen() wird zuerst berechnet, wieviele Sitzplätze im Pkw-Objekt noch frei sind: this.sitzplaetze minus this.mitfahrer. Das Ergebnis wird in der Variablen freiePlaetze gespeichert. Die Werte von sitzplaetze und freiePlaetze werden zur Information ausgegeben.

Dann wird in einer if - else if - else -Konstruktion geprüft, ob der Parameter-Wert negativ oder größer als der Wert von freiePlaetze ist. Wenn ja, wird eine passende Warnmeldung ausgegeben.

Nur wenn der Wert von personen im gültigen Bereich ist (≥ 0 und ≤ freiePlaetze), wird der Wert von mitfahrer aktualisiert. Anschließend wird der neue Wert von mitfahrer ausgegeben.

public void einsteigen(int personen) {
  System.out.println("---------------------------------");
  System.out.println("Einsteigevorgang " + this.marke + ":");
  
  int freiePlaetze = this.sitzplaetze - this.mitfahrer;
  
  System.out.println("Sitzplaetze           : " + this.sitzplaetze);
  System.out.println("Freie Plaetze         : " + freiePlaetze);
  System.out.println("Einsteiger            : " + personen);
  
  if (freiePlaetze < personen) {
    System.out.println("EINSTEIGEN NICHT MOEGLICH: zu viele Personen!");
  }
  else if (personen < 0) {
    System.out.println("NICHT MOEGLICH: negative Personenzahl!");
  }

  else {
    this.mitfahrer += personen;
    System.out.println("Mitfahrer aktuell     : " + this.mitfahrer);
  }
}

Klasse Verkehr

Die Klasse Verkehr bleibt unverändert wie im vorigen Schritt.

public class Verkehr {  
  public static void main(String[] args) {    
    Pkw pkw1 = new Pkw("Audi", 60, 5, 5);
    pkw1.tanke(20);
    pkw1.fahre(250);
    pkw1.einsteigen(2);
    pkw1.einsteigen(4);
    pkw1.einsteigen(-10);
  }
}

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

---------------------------------
Objekterstellung Audi
(60 Liter-Tank, Verbrauch 5.0 Liter auf 100 km)
(Typ PKW, 5 Sitzplaetze)
---------------------------------
Tankvorgang Audi:
Maximale Tankmenge    : 60.0 Liter
Gewuenschte Tankmenge : 20 Liter
Getankt               : 20 Liter
neuer Tankstand       : 20.0 Liter
---------------------------------
Fahrtvorgang Audi:
Tankstand             : 20.0 Liter
Maximale Fahrtstrecke : 400.0 km
Geplante Fahrtstrecke : 250 km
Streckenverbrauch     : 12.5 Liter
neuer Km-Stand        : 250 km
neuer Tankstand       : 7.5 Liter
---------------------------------
Einsteigevorgang Audi:
Sitzplaetze           : 5
Freie Plaetze         : 5
Einsteiger            : 2
Mitfahrer aktuell     : 2
---------------------------------
Einsteigevorgang Audi:
Sitzplaetze           : 5
Freie Plaetze         : 3
Einsteiger            : 4
EINSTEIGEN NICHT MOEGLICH: zu viele Personen!
---------------------------------
Einsteigevorgang Audi:
Sitzplaetze           : 5
Freie Plaetze         : 3
Einsteiger            : -10
NICHT MOEGLICH: negative Personenzahl!

Nun werden die 3 Aufrufe von einsteigen() korrekt behandelt:

  • Der erste Aufruf wird akzeptiert.
  • Der zweite Aufruf will zu viele Personen einsteigen lassen.
  • Der dritte Aufruf will eine negative Zahl von Personen einsteigen lassen.

Damit ist die erste Subklasse Pkw fertig.