2016-07-17 8 views
1

Ich versuche, einen Teil eines Programms zu schreiben, das faktorials mit Schleifen berechnet. Ich habe keine Fehlermeldungen, aber ich bekomme keine Ausgabe.Wie faktoriell mit Loops in Java zu berechnen

Gibt es Vorschläge für meinen Ansatz oder gibt es einen besseren Ansatz mit Schleifen? Vielen Dank!

import java.util.Scanner; 

public class Factorial { 
public static void main(String[] args) { 

    System.out.print("Enter a non-negative number that you wish to perform a factorial function on: "); 

    //Create scanner object for reading user input 
    Scanner input = new Scanner(System.in); 

    //Declare variables 
    int number = input.nextInt(); 
    int factTotal = 1; 

    //Execute factorial 
    do{ 
     factTotal = factTotal * number; 
     number--; 
     while (number >= 1); 
    } 
    while (number <= 0);{ 
     System.out.println("That's not a positive integer!"); 
    } 

    System.out.print(factTotal); 
} 

}

+0

* "Ich habe keine Fehlermeldungen, aber ich bekomme keine Ausgabe." * - Verwenden Sie einen Debugger! –

+2

'while (Zahl> = 1);' ist dasselbe wie 'while (Zahl> = 1) {/ * tue nichts * /}' und wird für immer ausgeführt. – Andreas

+0

Da faktorielle Berechnung bedeutet, positive Zahlen zu multiplizieren, was soll 'while (number <= 0) tun? Looping während 'number' negativ ist, scheint in diesem Code keinen Platz zu haben. – Andreas

Antwort

3

Dies ist so wie ich mich dem faktoriellen Teil deines Problems nähern würde. Ich würde die do/while-Schleifen abschaffen, weil es so aussieht, als ob Sie in einer Endlosschleife stecken bleiben, wenn Sie keine Ausgabe erhalten.

//Call this method when you want to calculate the factorial 
public int factorial(int num){ 
    for(int i = num-1; i > 1; i--){ 
     num *= i; 
    } 
    return num; 
} 

So würde es in Ihrem Code aussehen.

-1

in Ihrem Code in der do...while Schleife, haben Sie diese while Anweisung verwendet:

while (number >= 1); 

Haben Sie nicht das Semikolon bemerkt? Und was ist der Sinn dieser Schleife? Derzeit führt es zu einer Endlosschleife, da sich der Wert number niemals ändert und Sie somit keine Ausgabe erhalten.
Auch Ihre zweite while Schleife sollte viel eher eine if Aussage sein, wie unten
Das Stück Code gezeigt entspricht:

while (number >= 1) 
{ 
    //doNothing 
} 

Ich glaube, was Sie tun soll:

import java.util.Scanner; 

public class Factorial { 
public static void main(String[] args) { 

    System.out.print("Enter a non-negative number that you wish to perform a factorial function on: "); 

    //Create scanner object for reading user input 
    Scanner input = new Scanner(System.in); 

    //Declare variables 
    int number = input.nextInt(); 
    int factTotal = 1; 

    //Execute factorial 
    do{ 
     factTotal = factTotal * number; 
     number--; 
    } 
    while (number <= 1); 
    if(number < 0) 
    { 
     System.out.println("That is not a positive integer"); 
    } 
    else 
    System.out.print(factTotal); 
} 
+0

Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackoverflow.com/rooms/117502/discussion-between-skorrorlegaming-productions-and-vaibhav-bajaj). – Speentie8081

0

@Pernicious, Bitte beachten Sie Ihr Programm mit geringfügigen Änderungen und meine Kommentare hinzugefügt. Ich denke, das ist es, was du versucht hast.

import java.util.Scanner; 

public class Factorial { 

public static void main(String[] args) { 

    System.out.print("Enter a non-negative number that you wish to perform a  factorial function on: "); 

    //Create scanner object for reading user input 
    Scanner input = new Scanner(System.in); 

    //Declare variables 
    int number = input.nextInt(); 
    int factTotal = 1; 

// The input number check should be before factorial calculation 
    if(number <= 0){ 
     System.out.println("That's not a positive integer!"); 
     System.exit(0); 
    } 

    //Execute factorial 
    do { 
     factTotal = factTotal * number; 
     number--; 
// while (number >= 1); This while should be after do{}, not within do{} 
    } while (number >= 1); 
//  This check should be done immeduately after user input, not after calculation of factorial. 
//  while (number <= 0); 
//  { 
//   System.out.println("That's not a positive integer!"); 
//  } 

    System.out.println(factTotal); 
} 
}