Fakultät

  • Themenstarter Themenstarter newbie1000
  • Beginndatum Beginndatum
N

newbie1000

Gast
Hallo!

Ich habe ein programm zur berechnung der Fakultät geschrieben, dass auch funktioniert, zb.

5!=120

aber am ende schreibt das programm nicht 5! sondern 6!= 120

Java:
//Datei Fakultaet.java

public class Fakultaet 
{
	public static void main(String[] args) 
	{
		int n;
		int erg = 1;
		
		for(n = 1; n <= 5; n = n + 1)
		{
			erg = erg * n;
	
		}
		
		System.out.println("Ergebnis von " + n + "! = " + erg);

	}

}

Kann mir jemand erkären wo sich da der Fehler befindet?

Danke im Voraus!
 
boah, so einen grundlegenden Fehler willst du nicht weiter selber untersuchen?
vielleicht ist Maximum 1 oder 2 noch leicher als 5,

überlege dann doch, was du ausgibts, n beschäftigt dich wohl, was ist n, wann wird es verändert,
nenne doch Schritt für Schritt, wann deiner Meinung nach n wie verändert wird, wann auf welche Weise die Schleife abbricht usw.
 
Wenn du in die Schleife n <= 4 schreibst, gehts
oder wenn du n < 5 schreibst, also ohne das =

lass also das = weg, oder mach ne 4 draus 😉
 
@127.0.0.1
dann würde ja was anderes ausgerechnet werden, 120 ist schon das richte, ist 5!, nur die Ausgabe schreibt 6!
 
bin der Meinung von SlaterB
versuche es selbst herauszufinden.
Mithilfe des Debuggers kein Problem.

Dann verstehst du auch direkt wie die for-Schleife arbeitet 🙂
 
@SlaterB:

ääähhmm.....jap, du hast Recht ^^
hab ich übersehen, sorry :rtfm:



Man könnte natürlich vor dem Sysout ein
Code:
n=n-1;
schreiben, aber das wäre ja wie cheaten 🙂
 
Zuletzt bearbeitet:
ok, ich denke mir das so:

Die for-Schleife wird so lange durchgeführt solange n<= 5 ist, also erst wenn n den wert >5 (eben 6) annimt wird die schleife abgebrochen, und da 6 der letzte wert ist der n zugewiesen wird kommt eben 6!=... raus.

stimmt das so? lg
 
genau,

es ist jetzt nicht klar ob das eine neue Erkenntnis für dich ist,

jedenfalls dürfte doch klar sein was zu tun ist, mit n noch weiterrechnen lieber nicht, wobei denkbar,
führe einfach vorher eine Variable für max ein, und nimm die
 
Java:
public class Fakultaet 
{
    public static void main(String[] args) 
    {
        int max = 5;
        int erg = 1;
        
        for (int n = 1; n <= max; n = n + 1)
        {
            erg = erg * n;
        }
        
        System.out.println("Ergebnis von " + max + "! = " + erg);
 
    }
 
}

So in der Art. Wenn man die Schleifenvariablen so deklariert, sind sie nach der for-Schleife nicht gültig und können nicht verwirren.
 

Zurück
Oben