Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Neu instanzierte Klasse übernimmt Werte von anderer Instanz
package konto;
public class test_konto {
public static void main(String[] args) {
testKonten();
}
public static void testKonten() {
konto konto1 = new konto();
konto1.einzahlen(4980); // saldo knapp unter erstem Grenzwert
konto1.verzinsen(365);
konto1.getSaldo();
konto konto2 = new konto();
konto2.einzahlen(5000); // saldo = erster Grenzwert
konto2.verzinsen(365);
konto2.getSaldo();
konto2.einzahlen(100); // saldo knapp über erstem Grenzwert
konto2.verzinsen(365);
konto2.getSaldo();
konto konto3 = new konto();
konto3.einzahlen(49956); // saldo knapp unter zweitem Grenzwert
konto3.verzinsen(365);
konto3.getSaldo();
konto konto4 = new konto();
konto4.einzahlen(50000); // saldo = zweiter Grenzwert
konto4.verzinsen(365);
konto4.getSaldo();
konto4.einzahlen(100); // saldo knapp über erstem Grenzwert
konto4.verzinsen(365);
konto4.getSaldo();
// zur vereinfachung wird immer über 365 Tage verzinst
}
}
Ich war der meinung, dass der Wert von saldo bei jeder Neuinstanzierung "0" wäre. Tatsächlich wird aber jeweils der Wert der letzten Instanz übernommen (also saldo hat bei konto2 hat am Anfang den Wert, der bei konto1 mit getSaldo() ausgegeben wurde.
Warum? Was mache ich falsch?
"static" sorgt dafür das es sich nicht um ein Instanzattribut sondern ein Klassenattribut handelt. Sprich alle Instanzen von Konto (Klassennamen sollten in UpperCamelCase geschrieben werden) verwenden dann denselben Wert.
Oh ... stimmt
Ich habe noch nicht so viel Erfahrung ... bin noch in Ausbildung und lerne es zur Zeit in der Berufsschule ... und unsere Lehrerin ist leider unbrauchbar
Oh ... stimmt
Ich habe noch nicht so viel Erfahrung ... bin noch in Ausbildung und lerne es zur Zeit in der Berufsschule ... und unsere Lehrerin ist leider unbrauchbar
Das haben Berufsschullehrer leider oft an sich, vor allem in den Fachbereichen. Wenn du wirklich programmieren lernen willst kommst du um Eigeninitiative (oder einen guten Ausbilder im Betrieb) leider nicht umher :/
public class Konto {
double saldo = 0;
float zinssatz = 0.01f;
void einzahlen(float einzahlung) {
saldo += einzahlung;
System.out.println("Ihr Saldo beträgt zur Zeit " + saldo + " Franken.");
}
void verzinsen(int tage) {
float zins = getZins(tage);
saldo += zins;
System.out.println("Sie erhalten " + zins + " Franken Zins!");
}
float getZins(int tage) {
float zins;
if (saldo <= 5000) {
zins = (float) (saldo * zinssatz * tage / 365);
} else if (saldo <= 50000) {
zins = (float) (saldo * zinssatz * tage / 365 / 2);
} else {
zins = 0;
}
return zins;
}
@Override
public String toString() {
return "Ihr aktueller Saldo beträgt " + saldo + " Franken.";
}
public static void main(String[] args) {
Konto konto1 = new Konto();
konto1.einzahlen(4980); // saldo knapp unter erstem Grenzwert
konto1.verzinsen(365);
System.out.println("konto1 = " + konto1);
Konto konto2 = new Konto();
konto2.einzahlen(5000); // saldo = erster Grenzwert
konto2.verzinsen(365);
System.out.println("konto2 = " + konto2);
konto2.einzahlen(100); // saldo knapp über erstem Grenzwert
konto2.verzinsen(365);
System.out.println("konto2 = " + konto2);
Konto konto3 = new Konto();
konto3.einzahlen(49956); // saldo knapp unter zweitem Grenzwert
konto3.verzinsen(365);
System.out.println("konto3 = " + konto3);
Konto konto4 = new Konto();
konto4.einzahlen(50000); // saldo = zweiter Grenzwert
konto4.verzinsen(365);
System.out.println("konto4 = " + konto4);
konto4.einzahlen(100); // saldo knapp über erstem Grenzwert
konto4.verzinsen(365);
System.out.println("konto4 = " + konto4);
// zur vereinfachung wird immer über 365 Tage verzinst
Konto kontoTmp = new Konto();
kontoTmp.einzahlen(5000);
float zins = kontoTmp.getZins(1);
kontoTmp.verzinsen(177);
kontoTmp.einzahlen(-177 * zins);
System.out.println("kontoTmp = " + kontoTmp);
}
}
Code:
Ihr Saldo beträgt zur Zeit 4980.0 Franken.
Sie erhalten 49.8 Franken Zins!
konto1 = Ihr aktueller Saldo beträgt 5029.799999237061 Franken.
Ihr Saldo beträgt zur Zeit 5000.0 Franken.
Sie erhalten 50.0 Franken Zins!
konto2 = Ihr aktueller Saldo beträgt 5050.0 Franken.
Ihr Saldo beträgt zur Zeit 5150.0 Franken.
Sie erhalten 25.75 Franken Zins!
konto2 = Ihr aktueller Saldo beträgt 5175.75 Franken.
Ihr Saldo beträgt zur Zeit 49956.0 Franken.
Sie erhalten 249.78 Franken Zins!
konto3 = Ihr aktueller Saldo beträgt 50205.7799987793 Franken.
Ihr Saldo beträgt zur Zeit 50000.0 Franken.
Sie erhalten 250.0 Franken Zins!
konto4 = Ihr aktueller Saldo beträgt 50250.0 Franken.
Ihr Saldo beträgt zur Zeit 50350.0 Franken.
Sie erhalten 0.0 Franken Zins!
konto4 = Ihr aktueller Saldo beträgt 50350.0 Franken.
Ihr Saldo beträgt zur Zeit 5000.0 Franken.
Sie erhalten 24.246574 Franken Zins!
Ihr Saldo beträgt zur Zeit 5000.0 Franken.
kontoTmp = Ihr aktueller Saldo beträgt 5000.0 Franken.
Wobei man mit dem Jonglieren von float und double aufpassen sollte, wenn denn schon.