Zinsberechnung eines Kontos mit Arrays

Santana2

Grünschnabel
Aufgabe 4: Zinsberechnung
Ein Konto wurde am 1.2.2010 eröffnet und am 1.10.2010 will man wissen, wie viel Geld auf dem
Konto jetzt (inklusive Zinsen) vorhanden ist. Dazu stehen alle Ein- und Auszahlungen, die in
diesem Zeitraum gemacht wurden, in einem Journal zur Verfügung. Sie können davon ausgehen,
dass das Journal chronologisch geordnet ist. Beim Erzeugen eines ZinsBerechnungs Objekts wird das Journal mit Ein- und
Auszahlungen initialisiert.
Implementieren Sie die Methode berechneZins(…).

Wir hatten bis jetzt die drei Schleifenarten und if Bedingungen. Man sollte die Aufgabe mit diesen Methoden lösen.

Vorgabeprogramm:

Java:
public class ZinsBerechnung
{
    private EinAusZahlung[] journal = new EinAusZahlung [10];
    private float rate = 0.125f;
    /**
     * Constructor for objects of class ZinsBerechnung
     */
    public ZinsBerechnung()
    {
        // initialise instance variables
        journal [0] = new EinAusZahlung(01, 02, 2010,  +500);
        journal [1] = new EinAusZahlung(01, 04, 2010,  -200);
        journal [2] = new EinAusZahlung(01, 04, 2010,  +700);
        journal [3] = new EinAusZahlung(01, 05, 2010,  -500);
        journal [4] = new EinAusZahlung(01, 06, 2010, +1000);
        journal [5] = new EinAusZahlung(01, 06, 2010,  -500);
        journal [6] = new EinAusZahlung(01, 06, 2010,  -500);
        journal [7] = new EinAusZahlung(01, 07, 2010,  +500);
        journal [8] = new EinAusZahlung(01, 9,  2010, +1000);
        journal [9] = new EinAusZahlung(01, 10, 2010, -2000);
    }

    /**
     * An example of a method - replace this comment with your own
     * 
     * @param  journal   Ein-/Auszahlungen
     * @return zins
     */
    public float berechneZins(EinAusZahlung[] journal)
    {

        
        // Hier kommt Ihre Lösung hin
        
        
        
        
    }

    public void testCaseZinsRechnung()
    {
        float zins;
        zins = berechneZins(journal);
        System.out.println("Der Zins beträgt: " + zins);
    }

}

Ich habe keine Ahnung wie ich das lösen soll.. Gibt es eine Möglichkeit nur immer die Ein/bzw. Auszahlungen auszulesen aus den Arrays? Die Arrays wurden so vom Dozenten vorgegeben.

Ausserdem möchte das Programm immer eine Eingabe wenn ich es starten will. Ich weiss aber nicht was es erwartet.
 
Zuletzt bearbeitet:
Es wäre wirklich interessant zu sehen, wie die Klasse EinAusZahlung aufgebaut ist. Sicherlich hat sie eine return-Methode, welche dir den Wert zurück gibt.


Um dann den Wert auszurechnen, gehst du über eine Forschleife (ggf. auch while, wie du es gern magst) , weil du ja die Länge(größe) des Array weißst, addierst alle Werte und rechnest dann den Zins drauf (vorrausgesetzt ihr sollt nur am Ende Zinsen geben)


Eine Methode, die wartet, bis du eine Taste drückst, existiert hier soweit auch gar nicht. Die müsstest du selber anlegen, bist du dir da sicher, dass das gefordert ist, wo ihr gerade mal Schleifen lernt? Oder exisitiert diese schon irgendwo in einer anderen Klasse, dann solltest du die Klassen natürlich auch Posten.
 
Zuletzt bearbeitet:
Klasse EinAusZahlung:

Java:
public class EinAusZahlung
{
    private int tag, monat, jahr;
    private int umsatz;
    
    public EinAusZahlung(int tag, int monat, int jahr, int umsatz)
    {
        // initialise instance variables
       this.tag = tag;
       this.monat = monat;
       this.jahr = jahr;
       this.umsatz = umsatz;
    }

    public int getDay()
    {
        return tag;
    }
        public int getMonth()
    {
        return monat;
    }
        public int getYear()
    {
        return jahr;
    }
        public int getUmsatz()
    {
        return umsatz;
    }
}

Der Dozent bezieht sich auf ein Beispiel, welches wir früher mal hatten. Dabei mussten wir von Hand eine Zinsberechnung durchführen. Dort mussten wir folgendermassen vorgehen:

Den Saldostand anhand der Einauszahlungsliste am 1. jedes Monates berechnen.

Davon jeden Monat den Zins berechnen.

Am Ende die Zinsen jedes Monates zusammenrechnen und am Ende durch die Anzahl Monate dividieren, in welchen Zinsen berechnet wurden (Im Beispiel 12)
 
Zuletzt bearbeitet:
Habe nun folgendes probiert:

Java:
public float berechneZins(EinAusZahlung[] journal)
    {

        float Saldo = 0;
        float Mittenzahl = 0;
        float Zins = 0;
        int Verteilung = 100;
        for (int j = 0; j < journal.length; j++) {
            if (journal.length < 0) {
            }
            else {

                Saldo = journal [j].getUmsatz() + Saldo;
            }
            Mittenzahl = Saldo / Verteilung;
            Zins = Mittenzahl * rate;
        }
        return Zins;

Kann aber nicht Testen, ob das richtig ist, ich bekomme immer folgendes Bild (Das kommt auch, wenn ich noch keinen Code einfüge, also nur das vorgegebene Musterprogramm des Dozenten öffne)

helpzinsberechnung.jpg
 
1. Bitte Variablen in Java klein schreiben :)
2. Das if (journal.length < 0) { kannst rauslassen ;) Da du in der for-Schleife ja schon nach der Länge schaust, und er gar net in die forschleife kommt, wenn die länge 0 ist.
Bei journal [ j ] nimmt das Leerzeichen weg :D

3. Er erwartet einen Parameter beim Aufruf der Methode berechneZins (@param journal Ein-/Auszahlungen). Klick anstatt dem "float berechne Zins" einfach mal "testCaseZinsRechnung" an ;) Denn dort ruft er ja schon die Methode berechneZins auf ;)
 
Zuletzt bearbeitet:
bei test case Zinsrechnung gibt er mir 0 aus.

Ich glaube ich bewege mich in die falsche Richtung.

Mein Ziel war es, zum einen Immer das Saldo am Monatsende herauszufinden. Dazu kann ich ja leider nicht einfach jedes Saldo aus den arrays auslesen, da ja z.t. mehrere Bewegungen an einem Tag stattfinden.
Wenn ich die Saldi an jedem Monatsende habe, kann ich diese addieren und daraus den Gesamtzins errechnen.

Kann ich irgendwie angeben, dass er nur die letzte Zahl (oder wie nennt man die Einträge im Array) rauspickt?

z.b:

Java:
  journal [0] = new EinAusZahlung(01, 02, 2010,  +500);

Dass er mir hier nur die +500 am ende nimmt und damit etwas macht?
 
Das geht hier net wirklihc ums Array sondern um dein Objekt. Dieses hat folgenden Konstruktor:
Java:
EinAusZahlung(int tag, int monat, int jahr, int umsatz)
Diese Werte gibst du bei
Java:
  journal [0] = new EinAusZahlung(01, 02, 2010,  +500);
mit. D.h. von deiner EinAusZahlung brauchst du den Umsatz. Diesen bekommst du durch die getMethode
Wie du ja oben schon gemacht hattest (nur muss dies halt ohne das Leerzeichen nach dem journal/ arraynamen)
Java:
journal[j].getUmsatz()
Hier bekommst du den Umsatz von der EinAuszahlung von Position j im Array.
 
Zuletzt bearbeitet:
Mein Ziel war es, zum einen Immer das Saldo am Monatsende herauszufinden. Dazu kann ich ja leider nicht einfach jedes Saldo aus den arrays auslesen, da ja z.t. mehrere Bewegungen an einem Tag stattfinden.

Doch, da du mit der Methode getMonth() aus der KlasseEInAusZahlung ja den Monat weißt. Sobald sich der Wert ändert, wird der Wert nicht mehr addiert und die Addition der Werte abgebrochen.

getMonth liefert 1 zurück, wird addiert, .. getMonth liefert 1 zurück, wird addiert,.. getMonth liefert 2 zurück, abbruch. Ein ganz simples vergleiche mit dem vorrangegangen Wert..
 

Neue Beiträge

Zurück