Java Methode gibt falschen Wert aus?
Ich habe die Klasse Vehicle und eine Klasse VehicleApp. In der Klasse Vehicle App erzeuge ich eine Instanz der Klasse Vehicle mit dem Namen Audi.
public class VehicleApp{
Vehicle audi = new Vehicle("Audi", "S5",2012, Color.RED);
System.out.println(audi.getAlter());
}
Das Alter ist bei meiner Klasse eigentlich dadurch bestimmt durch "aktuellesJahr-baujahr" -> 2019 - 2012 = 7. Bei der Ausgabe wird mir jedoch 2019 angezeigt.
import java.util.Calendar;
import javafx.scene.paint.Color;
public class Vehicle {
//aktuelles Jahr
Calendar cal = Calendar.getInstance();
int aktuellesJahr = cal.get(Calendar.YEAR);
//Klassenattribute
private String marke;
private String typ;
private int baujahr;
private Color farbe;
private int alter = aktuellesJahr-baujahr;
//Konstruktor
public Vehicle(String marke, String typ, int baujahr, Color farbe) {
this.marke = marke;
this.typ = typ;
this.baujahr = baujahr;
this.farbe = farbe;
}
//Setter- und Gettermethoden
public int getAlter() {
return alter;
//return aktuellesJahr-baujahr;
}
}
Ändere ich das return-Statement von "return alter;" zu "return aktuellesJahr-baujahr," tritt das gewünschte Ergebnis (Ausgabe 7) ein. Könnt ihr mir eklären warum das return-Statement "return alter;" nicht das gewünschte Ergebnis erzeugt?
2 Antworten
Vmtl. weil das aktuelle Jahr von anfang an bekannt ist, während das Baujahr erst noch zugewiesen werden muss.
Bei der Anweisung steht dann im Endeffekt:
alter=2019-0
0 da das der Defaultwert für Integer ist.
Schreib das mal um und weis nicht von Anfang an zu. Füg dazu noch folgendes in den Konstruktor hinzu:
this.alter=aktuellesJahr-baujahr;
Probiers mal aus, wird vmtl. klappen.
Ums noch zu verdeutlichen ein Ausschnitt aus dem Debugger:
So schaut das ganze in Zeile 16 aus.
@Etter, danke dir für deinen Vorschlag, jetzt funktioniert der Code wie ich es mir vorstelle.
Bei der Zuweisung ist Baujahr nicht gesetzt und somit 0.
Füge dies zum Konstruktor hinzu:
this.alter = aktuellesJahr-baujahr