Neu instanzierte Klasse übernimmt Werte von anderer Instanz

MrChangelog

Neues Mitglied
Ich habe folgenden Code in einer Klasse:
Java:
package konto;

public class konto {

    static float saldo = 0;
    static float zinssatz = 0.01f;
   
    public void einzahlen(float einzahlung) {
        saldo += einzahlung;
        System.out.println("Ihr Saldo beträgt zur Zeit " + saldo + " Franken.");
    }
   
    public void verzinsen(int tage) {
        float zins = 0;
        if(saldo <= 5000) {
            zins = saldo * (zinssatz / 365) * tage;
        }
        else if(saldo <= 50000) {
            zins = saldo * ((zinssatz / 2) / 365) * tage;
        }
        else {
            zins = 0;
        }
        saldo += zins;
        System.out.println("Sie erhalten " + zins + " Franken Zins!");
    }
   
    public void getSaldo() {
        System.out.println("Ihr aktueller Saldo beträgt " + saldo + " Franken.");
        System.out.println();
    }
}

Und in einer weiteren Klasse dies:
Java:
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?
 
Du verwendest static 😉

"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 :/
 
So hätte man das geschrieben:
Java:
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.
 

Zurück
Oben