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.