# Zinseszinsberechnung mit einfacher Schleife



## Zipe (1. Oktober 2013)

Hey Leute,

Ich komme bei meinem Programm zur Zinseszinsberechnung nicht weiter und hoffe, dass ihr mir helfen könnt. Es Soll ein Programm werden, dass mir nach Eingabe eines Betrags, des Zinssatzes und der Laufzeit (das jahr) für jedes Jahr bis zu dem eingegebenen Jahr einen Betrag ausgibt.

Sprich, wenn ich "4" als Laufzeit angebe, soll er mir den Betrag nach Jahr 1,2,3,4 ausgeben.
Soweit so gut ... mein Code sieht folgendermaßen aus:


```
import Prog1Tools.IOTools;

public class Zinseszins {

	public static void main(String[] args) {

		double betrag = IOTools.readDouble("Anzulegender Geldbetrag in Euro: ");
		double jahreszins = IOTools.readDouble("Jahreszins: ");
		int jahr = IOTools.readInteger("Laufzeit (in Jahren): ");
		double endbetrag = 0;

		for (jahr = 1; jahr <= ?; jahr++) {
			endbetrag = endbetrag * jahreszins + betrag;
			System.out.println("Wert nach " + jahr + " Jahren: " + endbetrag);

		}

	}

}
```

Das "?" steht an der Stelle, wo ich Schwierigkeiten habe. Mir fällt einfach nicht ein, wie ich das Programm so schreibe, dass er mir BIS zu dem gewählten Jahr die Beträge berechnet. 

Desweiteren scheint auch innerhalb der Schleife irgendwas mit der Rechnung nicht zu stimmen, da er mir selbst wenn ich zum Test oben 
	
	
	



```
for (jahr = 1; jahr < 4; jahr++) {
```
 oder sowas eingebe nicht die richtigen Werte liefert.

VG Zipe


----------



## Theophilius (1. Oktober 2013)

du hast einen kleinen Denkfehler sag ich mal

Die Jahreszahl liest du doch ein oder?
Sprich du gibst 4 ein, er soll dir von 4 Jahren die Zinszahlen geben.
Demnach ist das "jahr" in deiner for schleife deine 4.
Du musst einen eigenen Wert für die for - schleife bei 1 beginnen lassen und bis zu "jahr" laufen lassen.


```
int jahr = IOTools.readInteger("Laufzeit (in Jahren): ");

        for (int i = 1; i <= jahr; i++) {
            endbetrag = endbetrag * jahreszins + betrag;
            System.out.println("Wert nach " + jahr + " Jahren: " + endbetrag);
 
        }
```

Soweit verstanden?

Gruß philius


----------



## Zipe (1. Oktober 2013)

Und was genau mache ich nun mit "i"? Muss ich dafür auch was einlesen lassen bzw. muss ich "i" irgendwo bestimmen?

Kriege jetzt den Fehler "Duplicate local variable i", wenn ich es so schreibe:


```
int i;
		
		for (int i = 1; i <= jahr; i++) {
			endbetrag = endbetrag * jahreszins + betrag;
			System.out.println("Wert nach " + jahr + " Jahren: " + endbetrag);
```


----------



## Theophilius (1. Oktober 2013)

Die Variable "i" zählt die Jahre des Zinses durch, angefangen bei 1, bis zu dem Jahr das du eingegeben hast, bei dir ist die Eingabe "jahr" so wie ich das bei dir rausgelesen habe?

Die Variable i war nur rein als name von mir definiert, nenne sie am besten nach deinen Wünschen, z.b. "jahreszähler" oder wie auch immer, auf jeden fall so dass sie vllt einzigartig und verständlich ist.

Dein duplicate local variable i folgt hieraus, siehe code: 


```
int i; // hier deklarierst du i schon einmal
        
        for (int i = 1; i <= jahr; i++) { // hier deklarierst du i erneut mit "int i"
            endbetrag = endbetrag * jahreszins + betrag;
            System.out.println("Wert nach " + jahr + " Jahren: " + endbetrag);
```

also enter das int aus for schleife löschen, weils oben schon deklariert ist, oder das int i; oben löschen um es in der for schleife zu deklarieren


Hier noch mal als Code


```
public class Zinseszins {
 
    public static void main(String[] args) {
 
        double betrag = IOTools.readDouble("Anzulegender Geldbetrag in Euro: ");
        double jahreszins = IOTools.readDouble("Jahreszins: ");
        int jahr = IOTools.readInteger("Laufzeit (in Jahren): ");
        double endbetrag = 0;
 
        for (int jahreszähler = 1; jahreszähler <= jahr; jahreszähler++) {
            endbetrag = endbetrag * jahreszins + betrag;
            System.out.println("Wert nach " + jahr + " Jahren: " + endbetrag);
 
        }
 
    }
 
}
```


----------



## Zipe (1. Oktober 2013)

Jap funktioniert alles, bis auf die Tatsache, dass ich falsche Zinswerte rausbekomme, also irgendwas falsch mit der Rechnung ist.

Für Betrag = 1000, Zins von 10% (0.1) und 5 Jahren laufzeit gibt er mir folgendes:

Anzulegender Geldbetrag in Euro: 1000
Jahreszins: 0.1
Laufzeit (in Jahren): 5
Wert nach 1 Jahren: 1000.0
Wert nach 2 Jahren: 1100.0
Wert nach 3 Jahren: 1110.0
Wert nach 4 Jahren: 1111.0
Wert nach 5 Jahren: 1111.1


----------



## sheel (1. Oktober 2013)

Weil du ganz einfach eine falsche Rechnung rechnen lässt.
a) Der Startwert für endbetrag sollte betrag sein, nicht 0.
b) endbetrag = endbetrag * (1 + jahreszins);

PS: Nachträglich Willkommen bei tutorials.de


----------



## Zipe (1. Oktober 2013)

Alles klar funktioniert! Danke Euch beiden! 

Schönen Abend noch


----------



## Theophilius (1. Oktober 2013)

dein code ist logisch noch nicht ganz richtig, das hast du schon erkannt,
überleg dir wie eine normale zinsrechnung über mehrere Jahre ausseiht.

Der Zins kommt doch immer wieder auf den neuen Betrag darauf, nicht auf einen Grundbetrag der stetig wächst.

kleiner Tipp: setze Endbetrag bei Deklaration nicht 0, sondern auf wert von "betrag".
Und dann darfst du in der Rechnung den Betrag natürlich nicht mehr dazunehmen, sondern musst den endbetrag nach Rechnung zu sich selbst addieren


----------



## sheel (1. Oktober 2013)

Ds hat er doch schon alles


----------



## Theophilius (1. Oktober 2013)

hatte das fenster noch auf und hab nicht mitgekriegt, dass schon was geschrieben wurde ^^
Soll ich den Beitrag löschen?


----------



## sheel (1. Oktober 2013)

Nein nein, ist doch kein Problem


----------

