Fakultäten von 1 bis 20

Richart

Mitglied
Abend allerseits,


Ich bin gerade an folgender (Anfänger-)Aufgabe dran:


ich soll eine Methode schreiben, die Die Fakultäten aller Zahlen i von 1 bis 20 zurückgibt.

Was ich bisher habe sieht wie folgt aus:


Java:
public class Facul {

	public static void main(String[] args) {
		
		int i; // Die Zahl(en) deren Fakultät bereichnet werden soll
		int j;

		for ( i = 1; i <= 20; i++){    // Das ist die Hauptschleife von 1 bis 20
			
			int konst = i;             // speichert den Wert von i konstant für die nächste Schleife
			
			for ( j = 1; j <= i; j++){ /* j wird um 1 erhöht und von "konst" abgezogen um nächsten
				                          multiplikator zu erhalten */ 
				
				if ((konst-j) == 0){
					System.out.println("Die Fakultät von 1 ist 1"); // 1!
				}
				
				else {
					
					i = i*(konst-j);   // Akkumulation der vorherigen Schritte
					
					if ((konst-j)== 1){
						System.out.println("Die Fakultät von "+konst+" ist "+i);
						break; // verhindert, dass Multiplikator "0" auftritt
					}	
				}	
			}	
		}
	}
}


Mein Problem ist das mir Eclipse nur die (richtigen) ergebnisse von 1! , 2!, 3! und 7! zurückliefert,
...aber bei 4 5 6 oder alles über 7 gibt es einfach nichts zurück.

Ich habe bereits versucht es mit Stift und Papier nachzuvollziehen, mir will aber schlicht nicht klar werden, warum diese Methode bei einigen bestimmten Zahlen problemlos funktioniert, und bei den anderen einfach durchläuft ohne was zurückzugeben ???:L


Wäre jedenfalls dankbar, wenn mir da jemand Licht ins Dunkel bringen würde ;)
 

nrg

Top Contributor
ich weiß nicht, was du mit deinem Code vorhast aber bis 20 würde ichs jetzt so in der Art machen:

Java:
    public static void main(String[] args) {
        for (int i = 1; i <= 20; i++){
            long fak = 1;  
            for (int j = 1; j <= i; j++) {
                 fak *= j;
            }
            System.out.println("Die Fakultät von " + i + " ist " + fak);
        }
    }
 

Final_Striker

Top Contributor
Eigentlich reicht dafür doch eine Schleife auch vollkommen aus. Man muss die Fakultät ja nicht immer neu ausrechnen.

Java:
        long fak = 1;
        
        for(int i = 1; i <= 20; i++)
        {
        	fak *= i;
        	System.out.println("Die Fakultät von " + i + " ist " + fak);
        }
 

Marco13

Top Contributor
Um das nochmal zu betonen: Ein wichtiger Punkt dabei ist, dass 'int' nur Zahlen bis 2^31 speichern kann, und er bei größeren Fakultäten überläuft. Mit long geht's ein bißchen weiter, aber 20 könnte auch knapp werden. Notfalls BigInteger verwenden.

Ansonsten solltest du vielleicht eine Methode schreiben
private static long factorial(int n) { ... }
 

Richart

Mitglied
@ nrg und Final_Striker,


ich musste mir grade an den Kopf fassen, wie völlig überkompliziert ich bei dieser Aufgabe gedacht habe^^


Einfach nen Initialen Wert angeben und dann alle folgenden nat. Zahlen hinzumultiplizieren, klar.


Jedenfall vielen Dank! :toll:



....wobei ich immer noch ein bisschen neugierig bin, wieso mein Ansatz nicht funktioniert hat.

Der ist zwar - wie gesagt - kompliziert aber mE. dennoch logisch ???:L
 
Zuletzt bearbeitet:

Landei

Top Contributor
Neben der iterativen Lösung sollte man auch die rekursive kennen:
Java:
public static long factorial(int i) {
   return i < 2 ? 1 : i * factorial(i-1);
}

Man sollte auch wissen, dass das nicht die schnellsten Varianten zur Berechnung sind, siehe Fast Factorial Functions
 

Landei

Top Contributor
Ich habe 666! im Angebot:

factorial-of-the-beast_design.png


Factorial of the Beast | Landei's Shop
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben