# Zinsberechnung mit for-Schleife



## am.anfang.stand.java (13. Dez 2007)

Nabend liebe User,

hab ein Problem mit der Zinsberechnung mit Hilfe der for-Schleife.
Es soll über 3 Jahre gehen. Zinssatz ist 4% und es gibt eine jährliche Einzahlung von 5000€.
Darin liegt eigtl auch schon mein Problem. Kriege es hin, dass erste Jahr auszugeben, mit dem richtigen Betrag von dann 5200€. Die anderen beiden Jahre werden zwar auch ausgegeben, jedoch mit dem gleichen Betrag.
Bekomme es nicht hin, dass die Einzahlung von 5000€ übernommen wird. Hier mein Text aus dem bisherigen Programm von mir

public static void main(String[] args) {
        double Einzahlung=5000;
        double Zinssatz=1.04;
        double Endbetrag;
        int Laufzeit =0;
        for (int i=1; i<4;i++){
            Endbetrag=Einzahlung*Zinssatz;
            Laufzeit= Laufzeit + 1;
            System.out.println(Laufzeit + " " + "Jahr" + ":" + " " + Endbetrag);

Ausgabe ist dann immer

1 Jahr: 5200
2 Jahr: 5200
3 Jahr: 5200


Kann mir jemand bitte helfen, was ich an meiner for-Schleife ändern muss?!

Vielen Dank


----------



## SlaterB (13. Dez 2007)

Endbetrag= Endbetrag* Zinssatz + Einzahlung; 
oder
Endbetrag= (Endbetrag+Einzahlung)* Zinssatz;


----------



## maki (13. Dez 2007)

Endbetrag=Einzahlung*Zinssatz; 

Du setzt Endbetrag im jedem Durchlauf auf den selben Wert.


----------



## am.anfang.stand.java (13. Dez 2007)

Muss ich dafür noch eine for-Schleife in das Programm schreiben?
Er gibt mir immer die gleichen Werte aus, da er die Einzahlung für das 2te und 3te Jahr noch nicht berücksichtigt.

Und wenn ich Endbetrag= (Endbetrag+Einzahlung)* Zinssatz; eingebe, sagt er mir das "Endbetrag" nicht definiert wurde. Zeigt mir da einen Fehler an


----------



## Guest (13. Dez 2007)

du musst ja auch endbetrag erstmal mit 0 intialisieren


----------



## am.anfang.stand.java (13. Dez 2007)

Vielen Dank, es hat geklappt.
Aber so richtig verstehen mag ich es nicht. Müsste es nicht eigtl mehr for Schleifen entwickelt werden?

Es sieht ja so aus

double Einzahlung=5000;
        double Zinssatz=1.04;
        double Endbetrag=0;
        int Laufzeit =0;
        for (int i=1; i<4;i++){
            Endbetrag =(Endbetrag+Einzahlung)*Zinssatz;
            Laufzeit= Laufzeit + 1;
            System.out.println(Laufzeit + " " + "Jahr" + ":" + " " + Endbetrag);

Was ich nur sehe ist, Endbetrag=(Endbetrag+Einzahlung)*Zinssatz
Das ergibt ja nach dem ersten Jahr 5200€
Im zweiten Jahr müsste doch eigtl das gleiche rauskommen oder liegt es daran, dass ich den Endwert auf i=<4 gesetzt habe, und die Schleife solange läuft bis sie diesen Punkt erreicht hat?
Dann würde es für mich logisch klingen.


----------



## seejay (13. Dez 2007)

ok erst einmal die Frage, was für eine Verzinsung du haben magst:
1. Nur einmal wird eingezahlt, und nur dieser Betrag wird verzinst:

```
double Einzahlung=5000;
double Zinssatz=0.04; //<-0.04!!!!
double Endbetrag=Einzahlung; 
for (int i=1; i<4;i++){ 
   Endbetrag =  Einzahlung * Zinssatz + Endbetrag;
   System.out.println("Jahr: " + i + " -> " + Endbetrag);
}
```

2. Nur einmal eingezahlt, aber Zinsen werden mit verzinst (Zinseszins):

```
double Einzahlung=5000;
double Zinssatz=1.04; //<-1.04!!!
double Endbetrag=Einzahlung; 
for (int i=1; i<4;i++){ 
   Endbetrag =  Endbetrag * Zinssatz;
   System.out.println("Jahr: " + i + " -> " + Endbetrag);
}
```

3.Es wird jedes Jahr eingezahlt und vorjährig verzinst:

```
double Einzahlung=5000;
double Zinssatz=1.04; //<-1.04!!!
double Endbetrag=Einzahlung;  //Eigentlich 0 im ersten jahr, da für dieses Jahr zuerst zinsen gezahlt wurden, danach eingezahlt wird
for (int i=1; i<4;i++){ 
   Endbetrag =  Endbetrag * Zinssatz + Einzahlung;
   System.out.println("Jahr: " + i + " -> " + Endbetrag);
}
```

4. nachjährige Verzinsung:

```
double Einzahlung=5000;
double Zinssatz=1.04; //<-1.04!!!
double Endbetrag=0;  //<- 0!!!
for (int i=1; i<4;i++){ 
   Endbetrag =  (Endbetrag + Einzahlung) * Zinssatz;
   System.out.println("Jahr: " + i + " -> " + Endbetrag);
}
```

so des müsste jeden Fall abdecken. Und Rechnungen müssten auch stimmen.

Gruß
seejay


----------



## am.anfang.stand.java (13. Dez 2007)

Wie gesagt, mein letzter Post mit meinem Code, das richtige Ergebnis ausgegeben. 
Hatte nur eine Verständnisfrage....

Trotzdem Danke


----------



## seejay (13. Dez 2007)

am.anfang.stand.java hat gesagt.:
			
		

> Vielen Dank, es hat geklappt.
> Aber so richtig verstehen mag ich es nicht. Müsste es nicht eigtl mehr for Schleifen entwickelt werden?
> 
> Es sieht ja so aus
> ...



axo hatte ich davor falsch verstanden. Die ganze Mühe umsonst 
also

```
Jahr       Enbetrag                                                           Einzahlung        Ergebnis
0                 0                                                                 5000             5000*1.04
1                 5000*1.04                                                    5000             ((5000*1.04)+5000)*1.04
2                 ((5000*1.04)+5000)*1.04                              5000             (((5000*1.04)+5000)*1.04) + 5000) *1.04
```
Hoffe so ist es verständlich. Endbetrag wird ja jedes Jahr neu gesetzt, deswegen erhöht es sich pro Schleifendurchgang


----------



## am.anfang.stand.java (13. Dez 2007)

Jip, das hatte ich ja mir auch schon fast gedacht. Schrieb irgendwo, dass die Schleife ja immer wiederholt wird und daher der Betrag beim 2ten und dritten Jahr dazugerechnet wird

Danke


----------



## am.anfang.stand.java (13. Dez 2007)

Eine andere Frage, wie schreibt man das Programm so, dass durch einen beliebigen Wert eingibt den man eingibt, danach einen Zinssatz usw... und das Programm dann die Eingaben umrechnet.
Hier ist es ja ein fester Satz, der berechnet wird und man müsste in den Code reingehen um z.B den Zinssatz zu verändern....
Hat jemand eine Idee?


----------



## seejay (13. Dez 2007)

bitte bei sowas zuerst suchfunktion benutzen.
Selbst hier im Forum findeste unmengen von Themen. Ich will aber mal net so sein:
http://www.java-forum.org/de/viewtopic.php?t=59237&highlight=scanner+konsole


----------



## am.anfang.stand.java (13. Dez 2007)

Danke


----------



## am.anfang.stand.java (13. Dez 2007)

import javax.swing.JOptionPane;

public class Zinsrechner {

    /** Creates a new instance of Uebungsaufgabe_7 */
    public static void main(String[] args) {
        String sEinzahlung = JOptionPane.showInputDialog("Geben Sie den jährlichen einzuzahlenden Betrag ein");
        String sZinssatz = JOptionPane.showInputDialog("Geben Sie den gewünschten Zinssatz ein");
        String sJahre = JOptionPane.showInputDialog("Geben Sie die gewünschte Laufzeit ein");
        int Einzahlung = Integer.parseInt(sEinzahlung);
        int Zinssatz = Integer.parseInt(sZinssatz);
        int Jahre = Integer.parseInt(sJahre);
        System.out.println("Betrag: " + (Einzahlung*Zinssatz));

Das ist mein Code, jedoch fehlt da noch einiges, wie bekomme ich hin, dass der Zinssatz nicht die Zahl ist, die man eingibt, sondern Zinssatz/100+1
Außerdem fehlt noch die Ausgabe für die xx Jahre. Hat jemand eine Idee?


----------



## seejay (14. Dez 2007)

eyeyey. lies dir mal die insel durch http://www.galileocomputing.de/openbook/javainsel6/


```
int Zinssatz = Integer.parseInt(sZinssatz);
 double zins = 1 + Zinssatz/100;
```

ich geh jetzt pennen. Gut Nacht


----------

