Dekrement läuft offenbar falsch

JL51

Aktives Mitglied
Hallo, ich bin Anfänger und habe versucht, ein einfaches Konsolenprogramm zur Berechnung der Fakultät der Zahl 5 zu schreiben. Das Ergebnis muß 120 sein, es wird allerdings immer 600 ausgegeben, weil das Dekrement in der For-Schleife nicht funktioniert. Das selbe ist übrigens auch dann der Fall, wenn ich statt --i schreibe: i=i-1 Es wird demnach also immer die Berechnung 5*5*4*3*2*1 ausgeführt. Woran liegt das? Hiert der Code:

Code:
public class Fakultaet1
{
	public static void main (String[] args)
	{
		int zahl = 5;
		int i = zahl;

		for(i=zahl;i>=1;--i)
		{
		zahl = zahl * i;
		}
		System.out.println(zahl);
	}
}

Erklärt mir bitte auch mal, wie ich auf Java in diesem einfachen Code einen Debugger einbauen kann, der dann die Variablen ausliest, damit ich mal lerne, wie das geht mit dem Debugger, Danke!

P.S.: Wenn ich in der For-Schleife ganz links schreibe i=zahl-1 funktioniert die Fakultätsberechnung richtig, aber das heißt dann doch, daß das Dekrement als Post-Dekrement läuft, obwohl die beiden Minuszeichen vor dem i stehen, oder?
 
Das liegt daran, dass die Berechnung des neuen Wertes erst für i immer erst zu Beginn des nächsten Schleifendurchlaufs passiert. Da ist es egal ob das ein pre- oder postdecrement ist.

Würdest du ein while(--i) machen wäre das was anderes.

Gruß

Claus
 
Zuletzt bearbeitet:
Wie Thallius schon gesagt hat, die "next"-Berechnung wird immer am Ende der Schleife ausgeführt.
Java:
for(<init>; <condition>; <next>) {
  <body>
}
Ist immer gleichbedeutend mit:
Java:
<init>
while(<condition>) {
  <body>
  <next>
}
lg Kevin
 
Zuletzt bearbeitet:
Vielen Dank für die Infos. Demnach kann man in for next Schleifen immer nur mit Postfix-Inkrement oder mit Postfix-Dekrement arbeiten. Das Lehrheft, mit dem ich hier zu Hause arbeite, erklärt das leider nicht klar genug.
 
Moin,
Vielen Dank für die Infos. Demnach kann man in for next Schleifen immer nur mit Postfix-Inkrement oder mit Postfix-Dekrement arbeiten
Was meinst mit "for-next"-Schleifen?

Ob Du ++i, i++ oder i=i+1 verwendest, ist bei einer for-Schleife relativ egal!
Schau' Dir nochmal den Beitrag von CSHW89 an, da wird es gut erklärt!

Gruß Klaus
 
Vielleicht hilft es dir zu verdeutlichen was Pre- bzw. Postinkrement genau bewirken:
Postinkrement;
Java:
int i = 0;
int k = i++;
System.out.println(k);
dieser Code gibt 0 aus, da k erst den Wert von i erhält und danach wird i erhöht.

Preinkrement
Java:
int i = 0;
int k = ++i;
System.out.println(k);
dieser Code gibt 1 aus, da i erst erhöht wird und danach dem k zugewiesen wird.

Bei einer for-Schleife wird der Zähler aber nur erhöht, daher ist es egal ob du pre/post increment nutzt.
 

Zurück
Oben