# While-Schleife



## Y2Jerichoholic (16. Jan 2012)

Hallo,

meine Aufgabe lautet:
Implementieren Sie im untenstehenden Programm eine while-Schleife, um die minimale
Anzahl n der Jahre zu ermitteln, die man bei einem Anfangskapital von k0 = 10981 Euro und
einem Zinssatz p = 0.023 benötigt, um ein Endkapital von mindestens kn = 20000 Euro zu besitzen.
Geben Sie die Anzahl n der Jahre und das Endkapital kn auf der Konsole aus.

Mein Ansatz sieht so aus:

```
class V {
	public static void main(String[] args) {
		double k0 = 10981.0; // Anfangskapital
		double p = 0.023; // Zinssatz
		double k_max = 20000; // gewuenschtes minimales Endkapital
		double kn = k0; // Kapital nach n Jahren
		int n = 0; // Anzahl der Jahre
		
		while(n<=k_max){
			k_max = k0 + p * k0 - kn;
			kn = kn + k_max;
			System.out.println(kn);
			n++;
		}
	}
}
```
Auf der Konsole wird zweimal die Zahl 11233.563 ausgegeben. Wie kann das Endkapital auf der Konsole ausgegeben werden? Besten Dank im Voraus.


----------



## HimBromBeere (16. Jan 2012)

dir ist schon klar, dass du erstmal ein gewisses q errechnen musst (denn wenn du eine Zahl mit .023 multiplizierst, wird sie wahrscheinlich kleiner und nicht größer, was ein schlechter Zins wäre...), falls dir das aus der Schule noch was sagt.

EDIT: Achso... das Program geht ja anders... mal überlegen

Deine Bedingung ist übrigens schonmal falsch, es müsste viel eher heißen 
	
	
	
	





```
while(kn <= k_max)
```

und dann berechnest du bitte nicht k_max neu (das sollte konstant bei 20.000€ liegen), sondern das kn und zwar über 
	
	
	
	





```
kn = kn * q
```

EDIT: Schau dir im Zweifelsfall mal deinen Mathehefter an zum Thema rekusrive Zahlenfolgen. Da wird das sicherlich irgendwo stehen...


----------



## Y2Jerichoholic (16. Jan 2012)

Ich habe noch die folgende Formel bekommen:
kn = kn−1 + p • kn−1.


----------



## HimBromBeere (16. Jan 2012)

wenn du da ´n paar Klammern setzt, ergibt´s auch Sinn.

Ist zwar etwas kompliziert, geht aber auch so (kürzer wäre folgendes: 
	
	
	
	





```
k(n) = k(n - 1) * (1 + p)
```
)

Welche der beiden auch immer du nimmst, jetzt hast du die Formel, die du in deine Schleife baust...


----------



## Y2Jerichoholic (16. Jan 2012)

Dankeschön. Müsste ich zuvor k(n - 1) initialisieren?


----------



## HimBromBeere (16. Jan 2012)

das war keine Java-Code-Zeile (was man schon daran erkennt, dass nicht das JAVA-Code-Tag verwendet wurde). Es war eine mathematische Formel. Das Anfangskapital k0 hast du schon "initialisiert" (
	
	
	
	





```
double k = 10981.0
```
)


----------



## Y2Jerichoholic (16. Jan 2012)

Der Quelltext sieht so aus:

```
class V {
	public static void main(String[] args) {
		double k0 = 10981.0; // Anfangskapital
		double p = 0.023; // Zinssatz
		double k_max = 20000; // gewuenschtes minimales Endkapital
		double kn = k0; // Kapital nach n Jahren
		int n = 0; // Anzahl der Jahre
		
		while(kn<=k_max){
			kn = k0 + p * k0;
			kn = kn + k_max;
			System.out.println(kn);
			n++;
		}
	}
}
```
Ist der Quelltext jetzt richtig?


----------



## HimBromBeere (16. Jan 2012)

neeeeee... das k_max hat in der Berechnung des aktuellen Kapitals nichts verloren (oder siehst du das in deiner Mathe-Formel irgendwo?). k0 brauchsteauch nicht, sondern nur ein einziges k (oder halt kn, mir egal, wie du das nennst^^) und ein k_max


----------



## Y2Jerichoholic (16. Jan 2012)

Meintest du etwa so hier?:

```
class V {
	public static void main(String[] args) {
		double k0 = 10981.0; // Anfangskapital
		double p = 0.023; // Zinssatz
		double k_max = 20000; // gewuenschtes minimales Endkapital
		double kn = k0; // Kapital nach n Jahren
		int n = 0; // Anzahl der Jahre
		
		while(kn<=k_max){
			kn = kn + p * kn;
			kn = kn + k0;
			System.out.println(n + ": " + kn);
			n++;
			
		}
	}
}
```


----------



## HimBromBeere (16. Jan 2012)

wenn du jetzt noch Zeile 11 entfernst, dürfte sogar was sinnvolles rauskommen.


----------



## Y2Jerichoholic (16. Jan 2012)

Ich danke dir :toll:.


----------

