Hallo zusammen,
ich habe ein Problem mit einer For-Schleife, die mir statt dem Rechenergebnis immer den Wert ausgibt, mit der die Variable initialisiert wurde.
Es soll der Preis eines Kleinwagens berechnet werden, wobei sich dieser jedes Jahr um 5% gegenüber dem Vorjahr reduziert. Da das Ganze im Rahmen einer Übung zu Vererbung steht, gibt es 3 Klassen:
Übergeordnete Klasse Auto:
Untergeordnete Klasse Neuwagen:
Untergeordnete Klasse Kleinwagen:
Wenn ich die Methode preis() aus der Klasse Kleinwagen nun in der main-Methode der Klasse Auto ausführen möchte, kommt als Ergebnis immer der Wert raus, mit dem der Endpreis initialisiert wurde. Das heißt, meine eigentliche Rechnung wird nicht ausgeführt.
Kann mir jemand sagen, woran das liegt? Was muss ich ändern, sodass in der main-Methode in der Klasse Auto mein Endpreis ordnungsgemäß berechnet wird?
Vielen Dank schon mal für eure Hilfe!
ich habe ein Problem mit einer For-Schleife, die mir statt dem Rechenergebnis immer den Wert ausgibt, mit der die Variable initialisiert wurde.
Es soll der Preis eines Kleinwagens berechnet werden, wobei sich dieser jedes Jahr um 5% gegenüber dem Vorjahr reduziert. Da das Ganze im Rahmen einer Übung zu Vererbung steht, gibt es 3 Klassen:
Übergeordnete Klasse Auto:
Hier stellt sich mir schon die Frage, warum ich bei der Instanziierung von Kleinwagen in der main-Methode für die fahrtkilometer nicht "null" angeben kann? Diese spielen für die vorliegende Berechnung ja überhaupt keine Rolle.public abstract class Auto {
private int kaufpreis;
private int baujahr;
public abstract int preis();
public Auto(int kaufpreis, int baujahr) {
this.kaufpreis = kaufpreis;
this.baujahr = baujahr;
}
public int getKaufpreis() {
return kaufpreis;
}
public void setKaufpreis(int kaufpreis) {
this.kaufpreis = kaufpreis;
}
public int getBaujahr() {
return baujahr;
}
public void setBaujahr(int baujahr) {
this.baujahr = baujahr;
}
public static void main (String[] args) {
Kleinwagen kw = new Kleinwagen(1000, 2020, 10);
((Kleinwagen) kw).preis();
kw.jahre = 2;
System.out.println ("Der Endpreis des Kleinwagens nach " + kw.jahre + " Jahren beträgt " + kw.preis());
}
}
Untergeordnete Klasse Neuwagen:
public class Neuwagen extends Auto {
private int fahrtkilometer;
public int gefahren (int kilometer) {
return kilometer; // Da ich das erst später brauche, passt das evtl. noch nicht...
}
@Override
public int preis() {
return preis();
}
public Neuwagen(int kaufpreis, int baujahr, int fahrtkilometer) {
super(kaufpreis, baujahr);
this.setFahrtkilometer(fahrtkilometer);
}
public int getFahrtkilometer() {
return fahrtkilometer;
}
public void setFahrtkilometer(int fahrtkilometer) {
this.fahrtkilometer = fahrtkilometer;
}
}
Untergeordnete Klasse Kleinwagen:
public class Kleinwagen extends Neuwagen {
int jahre;
public Kleinwagen(int kaufpreis, int baujahr, int fahrtkilometer) { // Definition des Konstruktors (braucht man den, wenn nur super)??
super(kaufpreis, baujahr, fahrtkilometer);
// TODO Auto-generated constructor stub
}
@Override
public int preis() {
int preis = 0; // Initialisierung des Endpreises
for (int i = 0; i >= getBaujahr(); i++) {
preis = (int) (getKaufpreis() * Math.pow((1-5/100),jahre));
}
return preis;
}
}
Wenn ich die Methode preis() aus der Klasse Kleinwagen nun in der main-Methode der Klasse Auto ausführen möchte, kommt als Ergebnis immer der Wert raus, mit dem der Endpreis initialisiert wurde. Das heißt, meine eigentliche Rechnung wird nicht ausgeführt.
Kann mir jemand sagen, woran das liegt? Was muss ich ändern, sodass in der main-Methode in der Klasse Auto mein Endpreis ordnungsgemäß berechnet wird?
Vielen Dank schon mal für eure Hilfe!