Erste Schritte Fakultät

Hi ich habe bei einer Übungsaufgabe zu Schleifen das Problem der richtigen Reihenfolge und das ich das mit der Bedingung scheinbar nicht richtig verstanden habe.
Im Anhang ist die Aufgabenstellung

Code :
Java:
         import java.util.Scanner ;
public class Fakultaet {
 
  public static void main(String[] args) {
   
    Scanner sc = new Scanner(System.in) ;
   
   
    System.out.println(" Geben sie eine Zahl ein" );
    int input = sc.nextInt() ;
    int i = 0 ;
   
    do {
      i = i + 1 ;
      input = i * input  ;
     
    } while (i==input); // end of do-while
    System.out.println(input);
  } // end of main
 
} // end of class Fakultaet

Hat jemand einen Tipp für den richtigen Ablauf ?
 

Anhänge

  • AufgabeFakultät.png
    AufgabeFakultät.png
    42,3 KB · Aufrufe: 30

Cromewell

Top Contributor
Hey :)
Zum einen brauchst du eine andere Variable, die du zum Speichern des Fakultätwertes nimmst.
Zum anderen
läuft die Schleife so lange, wie dieser Audruck true (wahr) ist, hier solltest du noch was ändern ;)

Also: Du solltest eine Varibale haben (z.B. result), die das Ergebnis, sowie die Zwischenergebnisse, speichert. Dazu ist eine Fakultät n! = 1*2*3*...*n . Heißt du musst in der Schleife result *= i; rechnen (wobei result einen Startwertvon 1 hat). Danach solltest du deine Bedingung, wie lange die Schleife läuft, so anpassen, dass sie solange läuft, wie result noch nicht mal input genommen wurde (Korrelation zwischen i und input) :p
 
Naja, eine do-while Schleife wird solange durch geführt, solange(!) eine Bedingung wahr ist. Wenn du jetzt aber beispielsweise 12 eingibst, dann hat deine Variable input den Wert 12. Die Variable i ist anfangs 0. Nach dem ersten Durchlauf ist i = 1 und input ist weiterhin 12 = 1 * 12.
Nun fragt sich die do-while-Schleife: Ist 1 == 12? Frage an dich: Wie müsste nun die Bedingung richtig aussehen?

Noch ein Tipp: An deiner Stelle würde ich noch eine weitere Variable int ergebnis = 1; erstellen und das Ergebnis dort speichern und diese Variable am Schluss ausgeben ;)
 

Cromewell

Top Contributor
result *= i dasselbe wie result = i* input
Nein, ist es nicht ( result *= i entspricht result = result*i): result = i*input überschreibt result jedes mal aufs neue, sodass nachher nicht die Fakultät rauskommen kann. Zudem ist es auch nicht immer i*input! Sondern result = result*i; Denn, nehmen wir input = 3; result = 1, also müssen wir, um 3! zu erhalten (1*2*3) dreimal result = result*i rechnen (result = 1*1, result = 1*2, result = 2*3) und kommen so auf das Ergebnis 6 :)
Schreib es dir mal auf ein Blatt, wenn es noch nicht klar ist, das hilft immer ;)
 
Nochmal ganz kurz ich probiere gerade was ähnliches nämlich Fibonacci
Aufgabe im Anhang

Mein Problem ist das ich nicht weiß wie ich die vorherige Zahl wieder bekomme :/
Habe jetzt mal einen Ansatz
Java:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 10.01.2017
  * @author
  */
    import java.util.Scanner ;
public class Fibonacci {
 
  public static void main(String[] args) {
  
    Scanner sc = new Scanner(System.in) ;
 
  
    int result = 1 ;
    int output = 0 ;
  
    for (int i = 0;i!=9 ;i++ ) {
      result = result + i ;
      output = 
      System.out.println(result);
    } // end of for
  
  } // end of main
 
} // end of class Fibonacci

Obwohl das mit dem i absolut keinen Sinn macht.
Ich muss irgendwie Result - vorheriges Result rechnen
 

Anhänge

  • Fibonacci.png
    Fibonacci.png
    42,5 KB · Aufrufe: 22

Cromewell

Top Contributor
Hey :)
Du brauchst dafür prinzipiell 3 Variablen: Eine, die das Zwischenergebnis speichert, eine, die die letzte Fibonacci-Zahl speichert, sowie eine Dritte, die den Wert der neuen, also des Zwischenergebnisses hat.
 

Neue Themen


Oben