# Zinsrechnung



## ekago (15. Dez 2014)

Am Anfang eines Jahres werden 1000 Euro auf ein Sparkonto eingezahlt. Wie viele Jahre
dauert es, bis bei einem Zinssatz von 2 Prozent daraus mindestens 3000 Euro geworden
sind? Das Startkapital und der Zinssatz sollen vom Benutzer eingegeben werden können.
(Antwort: 56 Jahre)

ich bin zur zeit so weit gekommen aber ich glaube da passt einiges noch nicht 
ich weiß auch nicht sicher ob man da eine while oder for schleife nimmt 


```
public static void main(String[] args) {
		// TODO Auto-generated method stub
System.out.println("Geben Sie ihr Starkapital ein");
double startkapital= new Scanner(System.in).nextDouble();

System.out.println("Geben Sie ein Zinssatz ein");
int zinssatz= new Scanner(System.in).nextInt();

while (startkapital<=3000){
double zusatz1jahr =(startkapital) * (zinssatz)/100;

double kapitalneu=startkapital+zusatz1jahr;
System.out.println(startkapital);
}
```


----------



## Supra (15. Dez 2014)

Also erste Frage: Was genau funktioniert denn Momentan und was nicht?
2. Wo hängst du? Was genau willst du Wissen.
3. Zu deiner Frage for oder While schleife, man kann beide verwenden, musst du gucken welche du verwenden willst.

EDIT: kann es sein das du eine endlosschleife hast?


----------



## Gucky (15. Dez 2014)

Das kann sogar sehr gut sein, da der TS starkapital nicht verändert.


----------



## Supra (15. Dez 2014)

Gucky hat gesagt.:


> Das kann sogar sehr gut sein, da der TS starkapital nicht verändert.


 Meine ich auch


----------



## Joose (15. Dez 2014)

ekago hat gesagt.:


> ich weiß auch nicht sicher ob man da eine while oder for schleife nimmt



Zur Information:

Jede for-Schleife kannst du in eine while-Schleife umwandeln, jede while-Schleife kannst du natürlich auch als for-Schleife schreiben 
Also ist es Grundsätzlich egal welche Schleife du nimmst, solange du die Bedingungen usw. richtig definierst.

Beispiel:

```
ArrayList<String> lines = new ArrayList<String>;
for(int i=0;i<lines.size();i++) {
    System.out.println(lines.get(i));
}

int i=0;
while(i<lines.size()){
    System.out.println(lines.get(i));
    i++;
}
```

Der Unterschied besteht hier nur darin, da die Deklarierung von "i" bzw. die Inkrementierung von "i" nicht im Schleifenkopf stehen.

Aber einen kleinen Denkansatz kann man hier schon beachten:
for-Schleife: Verwenden wenn man etwas X mal ausführen will. Beispiel: Du hast eine Liste und willst diese von Anfang (Index=0) bis Ende (Index=Size-1) durchgehen
Du weißt hier also wieviele Durchläufe es werden (Ende-Anfang)
while-Schleife: Verwenden wenn man etwas ausführen will, solange eine Bedingung gegeben ist. Beispiel: Du willst eine Datei solange zeilenweise lesen bis eine kommt die mit "END" beginnt
Du weißt hier nicht wieviele Durchläufe es werden da das Format was die Zeilenanzahl angeht variabel ist.

Am Ende entscheidest immer noch du  also nimm das was dir einfacher fällt auch wenn es für andere vielleicht unsinnger ist. Mit der Zeit gewöhnt man sich an beide Schleifen"arten".


----------



## ekago (15. Dez 2014)

Supra hat gesagt.:


> Also erste Frage: Was genau funktioniert denn Momentan und was nicht?
> 2. Wo hängst du? Was genau willst du Wissen.
> 3. Zu deiner Frage for oder While schleife, man kann beide verwenden, musst du gucken welche du verwenden willst.
> 
> EDIT: kann es sein das du eine endlosschleife hast?



ja genau ich habe eine endlosschleife

mein problem ist einfach dass ich nicht weiß was ich im schleifen-rumpf reinbringen soll. dass es dazuaddiert und weiter macht.


----------



## ekago (15. Dez 2014)

also wenn ich mir deine antwort so durchlesen macht auf dem ersten Blick eine While schleife mehr sinn denn bezogen auf die aufgabe soll die Bedingung so oft ausgeführt werden bis kapital 3000 beträgt.


kann ich dann die durchgänge die er gebraucht hat zählen weil die würden ja denn jahren etsprechen


----------



## Gucky (15. Dez 2014)

Wenn du willst, dass sich ein Wert ändert, musst du ihn auch verändern. Momentan tust du das nicht.


----------



## Joose (15. Dez 2014)

ekago hat gesagt.:


> also wenn ich mir deine antwort so durchlesen macht auf dem ersten Blick eine While schleife mehr sinn denn bezogen auf die aufgabe soll die Bedingung so oft ausgeführt werden bis kapital 3000 beträgt.



Sehe ich ebenfalls so 

Wie Gucky schon sagte: Du weißt zwar Werte zu in der Schleife, aber "startkapital" bleibt unverändert und daher läuft deine Schleife endlos.


----------



## Gucky (15. Dez 2014)

Mal eine Zwischenfrage: Muss das unbedingt mit Schleifen gelöst werden?


----------



## lord239123 (15. Dez 2014)

Ich würde an deiner Stelle mit folgender Formel arbeiten:

```
int a = 1000;
		int z = 2;
		double n =  Math.log(3000/a)/Math.log(1D+z/100D);
		System.out.println(n);
```

Diese Formel habe ich gerade eben hergeleitet und sie wurde gerade eben von mir getestet.
3000€ = a *(1+z/100)^n   |/a
3000/a = (1+z/100)^n      | log zur Basis (1+z/100)

n = log zur Basis(1+z/100) von (3000/a)

da es in der Klasse Math nur log-Methoden für die Basen 10 und e gibt, muss man ein wenig tricksen:

n = log(3000/a)/ log(1+z/100)

a ist hierbei das Startkapital und z der Zinssatz.


----------



## Gucky (15. Dez 2014)

Genau das war auch meine Idee.


----------



## Supra (16. Dez 2014)

ekago hat gesagt.:


> also wenn ich mir deine antwort so durchlesen macht auf dem ersten Blick eine While schleife mehr sinn denn bezogen auf die aufgabe soll die Bedingung so oft ausgeführt werden bis kapital 3000 beträgt.
> 
> 
> kann ich dann die durchgänge die er gebraucht hat zählen weil die würden ja denn jahren etsprechen



Das kannst du, als kleiner tipp, manchmal macht es sinn auf papier aufzuschreiben was genau passieren soll in einem ablauf, so mäßg wie ein pseudocode.


----------



## Andi_CH (19. Dez 2014)

ekago hat gesagt.:


> ja genau ich habe eine endlosschleife
> 
> mein problem ist einfach dass ich nicht weiß was ich im schleifen-rumpf reinbringen soll. dass es dazuaddiert und weiter macht.



Wie wäre es mit einer Addition - die addiert dazu


```
int i = 0;
	while (i < 10) {
		i = i + 1;
	}
	System.out.println("Traraaaa - while beendet");
	// Geht auch so
	i = 0;
	do {
		i = i + 1;
	} while (i < 10);
	System.out.println("Traraaaa - do - while beendet");
```

Ja ich weiss, man könnte auch i += 1; schreiben


----------

