Warum hoert while loop nicht auf und Wert aendert sich nicht?

DDDB

Grünschnabel
Hallo zusammen!
Ich habe ein Problem mit einer Uebung, bei der ich mir mein Guthaben nach x Jahren auf meinem Tagesgedkonto ausrechnen und anzeigen lassen will.
Der Zinssatz ist nach Guthabengroesse gestaffelt. Da ich noch absoluter Anfaenger bin, stehen mir nur ziemlich wenige Befehle zur Verfuegung (Ich bin sicher, es gibt viel elegantere und kuerzere Loesungen ohne tausend Mal if und while und else, kenn ich aber noch nicht).

So wie ich es gemacht habe (s.u.) hoert der Loop aber niemals auf, ausserdem aendert sich das angezeigte Guthaben nicht. Wieso?
Bitte habt Nachsicht, bin ein absoluter Anfaenger (erste Woche), ich vermute schon, dass es ein absout bescheuerter Denkfehler ist, den ich aber einfach nicht entdecke.
Vielen Dank im Voraus!


package package4;

/* Konditionen:
* 0.01 bis 5000 EUR : 1,75% p.a.
* 5000,01 bis 50.000,00 EUR: 1 % p.a.
* ab 50.000, 01 0,5 % p.a.
* Formel: A = P [(1+R)hoch n]
*/
public class Tagesgeldkonto {

public static void main (String [] args)
{
double startkap = 10000; //hier das Startkapital eingeben
double zinssatz = 0.0175;
double zinssatz2 = 0.01;
double zinssatz3 = 0.005;
int jahreend = 50; //hier die Laufzeit eintragen
int jahre = 1;
double guthaben;

if (startkap <=5000)
do
{
guthaben= startkap * Math.pow(1+zinssatz,jahre);
System.out.println(guthaben);
jahre=jahre++;
}
while (guthaben<=5000 & jahre<=jahreend);

do
{
guthaben= startkap * Math.pow(1+zinssatz2,jahre);
System.out.println(guthaben);
jahre=jahre++;
}
while (guthaben>5000 & guthaben<=50000 & jahre<=jahreend);

do
{
guthaben= startkap * Math.pow(1+zinssatz3,jahre);
System.out.println(guthaben);
jahre=jahre++;
}
while (guthaben>50000 & jahre<=jahreend);

if ((startkap>5000) & (startkap <=50000))
do
{
guthaben= startkap * Math.pow(1+zinssatz2,jahre);
System.out.println(guthaben);
jahre=jahre++;
}
while (guthaben>5000 & guthaben<=50000 & jahre<=jahreend);

do
{
guthaben= startkap * Math.pow(1+zinssatz3,jahre);
System.out.println(guthaben);
jahre=jahre++;
}
while (guthaben>50000 & jahre<=jahreend);

if (startkap >50000)
do
{
guthaben= startkap * Math.pow(1+zinssatz3,jahre);
System.out.println(guthaben);
jahre=jahre++;
}
while (jahre<=jahreend);


}

}
 
Hi,

vorneweg: Bitte schreib code immer in der code-Umgebung, das ist dann viel übersichtlicher.

Du hättest eine der folgenden drei Varianten nehmen können:

Code:
jahre++;
jahre += 1;
jahre = ++jahre;

Nur das, was du gemacht hast darfst du nicht machen ;)

So wie du das gemacht hast darfst du dir das folgendermaßen vorstellen (bitte korrigiere mich jemand fals ich hier Mist erzähle):

Der Wert von "jahre" wird in einen Zwischenspeicher genommen und von da aus wieder "jahre" zugewiesen. Danach wird der Wert in diesem Zwischenspeicher um eins erhöht. Das bringt dir dann aber nichts mehr.

MfG
DarkWizzard
 
Willkommen bei tutorials.de :)

Zuerst einmal: Bei deinen Bedingungen in den while-Schleifen verwendest du & als 'und'.
Es ist aber && ! Dasselbe gilt für 'Oder', das ist ||
Doppeltes Zeichen!
Einzelne können zwar je nach Situation sogar das Gleiche bewirken, sind aber was anderes und funktionieren nicht immer gleich wie die doppelten.

Probiers einmal mit den Doppelten

PS: Das mit den Jahren ist schon so in Ordnung
 
Ich hab deinen Code einmal etwas kompakter gemacht, als Beispiel.
Java:
public class Zinsen
{
	public static void main (String [] args)
	{
		double startkap = 10000; //hier das Startkapital eingeben
		int jahreend = 50; //hier die Laufzeit eintragen

		int jahre;
		double guthaben;
		double zinssatz;

		guthaben=startkap;

		for(jahre=0;jahre<jahreend;jahre++)
		{
			if(guthaben<=5000.0)zinssatz=1.75;
			else if(guthaben<=50000.0)zinssatz=1.00;
			else zinssatz=0.50;

			guthaben = guthaben + (guthaben*(zinssatz/100.00));

			System.out.println("Jahr " + (jahre+1) + ": " + guthaben);
		}
	}
}
 
Wow, das ging ja flott! Vielen Dank!

Hat mir sehr geholfen, es lag, wie DarkWizzard berichtigt hat, am
PHP:
jahre = jahre++;
Wieder was gelernt.

Vielen Dank auch @ sheel, ich werde mir den Unterschied zwischen Doppel-Unds und -Oders merken. Hatte in diesem Fall jedoch keine Veraenderung gebracht. Danke auch fuer die Muehe, mir eine kompakte Version anzubieten. Da bin ich wohl ueber Moskau nach Rom gewandert. Das war schon immer mein Problem. :)
 
Das ++ hat doch einen Unterschied gemacht?
Jetzt hab ich auch wieder was dazugelernt :)

Ich sollte sowas wohl nicht in C probieren und denken, dass es in Java gleich ist :D
 

Neue Beiträge

Zurück