Das Autohaus
Lösung geprüft
Die Aufgabe der heutigen Stunde ist das Autohaus! Wir haben jetzt eine
fertige Klasse Auto vor uns liegen und wollen sie auch
endlich mal benutzen. Genau dafür ist das Autohaus da: es ist unsere
Spielwiese, auf der wir Autos erzeugen, betanken und fahren lassen.
Wenn du aus der E-Phase kommst, sieht das hier erstmal komisch aus. Wir schreiben nämlich zwei Dateien statt einer. Das ist aber genau der Punkt bei der OOP und garnicht so wild, wenn man es einmal gemacht hat.
classDiagram
class Auto {
-String Kennzeichen
-double Kilometerstand
-double Tankvolumen
-double Kraftstoffverbrauch
-double Kraftstoffmenge
+Auto(String, double, double)
+getKennzeichen() String
+getKilometerstand() double
+getKraftstoffmenge() double
+tanken(double) void
+fahren(double) void
}
class Autohaus {
+main(String[]) void
}
Autohaus ..> Auto : erzeugt mit new
Erzeuge eine neue Klasse Autohaus im JavaEditor über
Datei > Neu > Console. Speichere die Klasse im gleichen
Ordner, wie die Klasse Auto. Nenne die Datei
Autohaus.java. Trage deinen Namen als Autor ein.
Dazu kam in der Stunde noch das Beispiel an der Tafel: in
main ein Auto erzeugen, es betanken und fahren lassen, und
am Ende den Kilometerstand ausgeben. Genau das bauen wir jetzt.
Was wir schon haben
Die Klasse Auto ist vorgegeben. Wichtig sind für uns vor
allem zwei Stellen: der Konstruktor, weil der uns sagt was wir beim
Erzeugen angeben müssen, und die beiden Methoden tanken
und fahren ganz unten, in denen noch // TODO
steht.
public class Auto {
// Anfang Attribute
private String Kennzeichen;
private double Kilometerstand;
private double Tankvolumen;
private double Kraftstoffverbrauch;
private double Kraftstoffmenge;
// Ende Attribute
//Konstruktor
public Auto(String Kennzeichen, double Tankvolumen, double Kraftstoffverbrauch) {
this.Kennzeichen = Kennzeichen;
this.Tankvolumen = Tankvolumen;
this.Kraftstoffverbrauch = Kraftstoffverbrauch;
Kilometerstand = 0;
Kraftstoffmenge = 0;
}
// Anfang Methoden
public String getKennzeichen() {
return Kennzeichen;
}
public double getKilometerstand() {
return Kilometerstand;
}
public double getKraftstoffmenge() {
return Kraftstoffmenge;
}
public void tanken(double Menge) {
// TODO
}
public void fahren(double Strecke) {
// TODO
}
// Ende Methoden
}
Lösungsprozess der Aufgabe
/**
*
* Das fertige Java Programm des Autohauses
*
* @version 1.0 vom 13.09.2025
* @meininfokurs.cmrg.site
*/
public class Autohaus {
public static void main(String[] args) {
// Ein neues Auto. Die drei Werte gehen an den Konstruktor:
// Kennzeichen, Tankvolumen (Liter), Kraftstoffverbrauch (L pro 100 km)
Auto meinAuto = new Auto("WI-AB 123", 50, 6.5);
meinAuto.tanken(20); // 20 Liter in den Tank
meinAuto.fahren(100); // 100 Kilometer fahren
System.out.println("Kilometerstand: " + meinAuto.getKilometerstand());
} // end of main
} // end of class Autohaus
In der Aufgabenstellung wird gefordert, dass wir folgende Sachen umsetzen:
- Eine neue Konsolen-Klasse
Autohausanlegen, im selben Ordner wieAuto.java - Den Kommentarkopf ausfüllen und den eigenen Namen als Autor eintragen
- Die
main-Methode als Startpunkt schreiben - Ein Objekt der Klasse
Autoerzeugen - Das Auto betanken und fahren lassen
- Den Kilometerstand in der Konsole ausgeben
- Verstehen, warum der Kilometerstand trotzdem 0 bleibt
Die Klasse anlegen
Im JavaEditor gehst du auf Datei > Neu > Console und
speicherst die Datei als Autohaus.java. Achte wirklich
darauf, dass sie im gleichen Ordner liegt wie
Auto.java. Wenn die beiden Dateien in verschiedenen Ordnern
liegen, findet Java die Klasse Auto nicht und du bekommst
beim Kompilieren ein cannot find symbol um die Ohren
gehauen. Das ist einer der häufigsten Fehler bei dieser Aufgabe.
Der Kommentarkopf
Ganz oben steht ein mehrzeiliger Kommentar. Der fängt mit
/* an und hört mit */ auf, und dazwischen
gehört in jede Zeile ein Stern an den Anfang. Alles was dadrin steht
wird beim Ausführen komplett ignoriert, es ist also nur für uns
Menschen da. Hinter @author kommt dein Name.
Die main-Methode
Die main-Methode ist der Startpunkt von jedem Java
Programm. Ohne sie passiert beim Ausführen einfach nichts. Die vier
Wörter davor sehen nach viel aus, jedes hat aber seinen Grund:
| Wort | Was es bedeutet |
|---|---|
public | Die Methode ist von überall aufrufbar. |
static | Sie gehört zur Klasse selbst und nicht zu einem Objekt. Nur deshalb kann die JVM sie starten, ohne vorher ein Autohaus-Objekt zu bauen. |
void | Sie gibt keinen Wert zurück. |
String[] args | Ein Array, über das man dem Programm beim Start noch Werte mitgeben könnte. Brauchen wir hier nicht. |
Die Kommentare // end of main und
// end of class Autohaus musst du nicht schreiben, aber
sie helfen dir später enorm. Wenn du fünf verschachtelte Klammern
zumachst, siehst du damit sofort welche Klammer zu was gehört.
Ein Objekt erzeugen
Jetzt der eigentlich spannende Teil. Bis jetzt hatten wir mit
Auto nur den Bauplan. Ein Bauplan kann aber nicht fahren.
Mit new bauen wir aus dem Bauplan ein echtes Auto:
Auto meinAuto = new Auto("WI-AB 123", 50, 6.5);
Warum genau diese drei Werte? Weil der Konstruktor in der Klasse
Auto genau die drei haben will:
Auto(String Kennzeichen, double Tankvolumen, double Kraftstoffverbrauch).
Die Reihenfolge ist dabei fest. Wenn du die drehst, meckert der
Compiler entweder wegen der Datentypen, oder er meckert nicht und dein
Auto hat plötzlich 6,5 Liter Tank und verbraucht 50 Liter auf 100 km.
Der Kilometerstand und die Kraftstoffmenge werden wir nicht mitgeben,
die setzt der Konstruktor selbst auf 0. Macht ja auch Sinn, ein neues
Auto ist leer und ungefahren.
meinAuto ist übrigens nur der Name, den wir uns
ausdenken. Du kannst das Ding auch a1 nennen. Sprechende
Namen sind aber nie verkehrt.
Methoden aufrufen und ausgeben
Ab hier arbeiten wir immer über den Punkt. Links vom Punkt steht das Objekt, rechts davon was es machen soll:
meinAuto.tanken(20);
meinAuto.fahren(100);
System.out.println("Kilometerstand: " + meinAuto.getKilometerstand());
tanken und fahren sind Prozeduren, die geben
nichts zurück. getKilometerstand() ist dagegen eine
Funktion, die liefert uns einen double zurück, und den
können wir mit dem + direkt an unseren Text dranhängen.
Das nennt sich Konkatenation.
Warum trotzdem nichts passiert
Und jetzt kommt der Teil, über den in der Stunde die halbe Klasse gestolpert ist. Du führst das Programm aus, es kompiliert sauber, es läuft durch, und dann steht da:
Kilometerstand: 0.0
Wir haben getankt und sind 100 km gefahren, und trotzdem steht der
Kilometerstand auf 0. Kaputt ist deswegen aber nichts. Schau nochmal
in die Klasse Auto: in tanken und
fahren steht nur // TODO drin, also nichts.
Wir rufen also zwei Methoden auf, die brav aufgerufen werden und dann
einfach nichts tun.
Das ist der Unterschied zwischen einem Syntaxfehler und einem semantischen Fehler. Die Syntax stimmt hier komplett, deshalb beschwert sich der Compiler auch nicht. Der Code macht nur nicht das, was er machen soll. Diese Sorte Fehler ist die fiesere von beiden, weil dir niemand sagt dass was falsch ist, du musst selber drauf kommen :)
Die beiden Methoden füllen wir in der nächsten Aufgabe.