2017-02-06 2 views
-4

Ich mache dieses Programm in der Lage sein, faktorials zu berechnen. Ich brauche es, um einen Satz zu sagen, wenn sie einen Wert über 20 eingeben, aber ich habe eine Endlosschleife erstellt. Meine Linie, die sagtWie repariere ich diese unendliche while Schleife

System.out.print ("ERROR: The result is inaccurate because the number was too large for the data type");} 

Ist eine Endlosschleife. Ich kann nicht herausfinden, wie ich es beheben kann. Ich habe versucht, die Platzierung der Dinge zu verschieben, aber ich kann es nicht herausfinden. Jede Hilfe wird geschätzt.

import java.util.Scanner; 
import java.text.NumberFormat; 

public class FactoralApp 
{ 
public static void main(String[] arge) 
{ 

    //Welcome users the the application and get user input 
    System.out.print("Welcome to the Factoral Calculator" + "\n"); 


    int num; 

    Scanner sc = new Scanner(System.in); 
    String choice = "y"; 
    while (choice.equalsIgnoreCase("y")) { //set up the while loop so that users can find many factorials 

    long factorial=1; //initialize variables 


    System.out.print("\n" + "Enter an integer between 1 and 20: "); //promt users for input 
    num = sc.nextInt(); 

    for (int i = num; i >= 1; i--){ //Calculate factorial 
    factorial = factorial * i;} 

    while (num > 20) { 
     System.out.print ("ERROR: The result is inaccurate because the number was too large for the data type");} 




    // Format and display the results 

    NumberFormat number = NumberFormat.getNumberInstance(); 

    String message = 
       ("\n" + "The factoral of " + num + " is " + number.format(factorial) + "." + "\n"); //create message 

    System.out.println(message); // Output the formated message 

    System.out.print ("Continue (y/n): "); //promt users for input 
    choice = sc.next(); 
    } // End While 



} // End main() 



} // End Class 
+0

Der erste Schritt in die Lösung Ihres Problems wird Ihr Problem zu isolieren, was bedeutet, es ist Zeit zu Führen Sie ein ernstes Debugging durch, entweder mit einem Debugger, der es Ihnen erlaubt, Ihren Code durchzugehen und Variablen zu analysieren, während das Programm fortschreitet, oder mit einem Logger oder mit einem "arge man's debugger" - eine Menge println-Anweisungen, die den Variablenstatus offenlegen wie das Programm fortschreitet. Viel Glück! –

+4

Wollten Sie 'if' anstelle von' while' verwenden? –

+0

Welche Variable checken Sie in Ihrer booleschen Bedingung ein? Weiter - bist du ** Ändern Sie die Variable irgendwo innerhalb der While-Schleife ** ??? Wenn nicht, ändern Sie num nie innerhalb der Schleife, dann ändert sich das boolesche Testergebnis der while-Schleife ** nie ** und die Schleife wird niemals enden. Dies ist keine Programmierfrage, sondern eine einfache logische Frage. –

Antwort

-2

Sie nie den Wert der innerhalb Ihrer while-Schleife num Variable ändern. Da dies die Variable ist, die Sie in der booleschen Bedingung der while-Schleife überprüfen, ändert sich die -Bedingung nie, und die while-Schleife läuft Gefahr, für immer zu laufen.

Lösung: Aktualisieren Sie die Variable innerhalb der Schleife. Verwenden Sie Ihre Scanner-Variable, sc, genau wie Sie vor die Schleife.

0

Ich schlage vor, dass Sie bitte die Funktionsweise der Steueranweisungen verstehen. while ist eine Schleife und offensichtlich wird es laufen, bis Bedingung erfüllt ist. Unten ist der korrekte Code.

public static void main(String[] args) { //Welcome users the the application and get user input 
     System.out.print("Welcome to the Factoral Calculator" + "\n"); 


     int num; 

     Scanner sc = new Scanner(System.in); 
     String choice = "y"; 
     while (choice.equalsIgnoreCase("y")) { //set up the while loop so that users can find many factorials 

     long factorial=1; //initialize variables 


     System.out.print("\n" + "Enter an integer between 1 and 20: "); //promt users for input 
     num = sc.nextInt(); 

     for (int i = num; i >= 1; i--){ //Calculate factorial 
     factorial = factorial * i;} 

     if (num > 20) { 
      System.out.print ("ERROR: The result is inaccurate because the number was too large for the data type");} 




     // Format and display the results 

     NumberFormat number = NumberFormat.getNumberInstance(); 

     String message = 
        ("\n" + "The factoral of " + num + " is " + number.format(factorial) + "." + "\n"); //create message 

     System.out.println(message); // Output the formated message 

     System.out.print ("Continue (y/n): "); //promt users for input 
     choice = sc.next(); 
     } // End While 



} 

Beschreibung-: Nur unter Abschnitt des Codes wurde aktualisiert. Jetzt wird der obige Code ERROR: The result is inaccurate because the number was too large for the data type Fehler nur einmal drucken.

Wenn diese Codeänderung nicht Ihre Anforderung erfüllt, geben Sie weitere Details an. Wie oft möchten Sie diese Fehlermeldung drucken?

1

ich statt, während denken, müssen Sie ein, wenn die Bedingung zu überprüfen, ob die eingegebene Zahl größer als 20.

if(num > 20) { //the result cannot be stored in a long data type so alert 
     System.out.print ("ERROR: The result is inaccurate because the number was too large for the data type");} 

// Format and display the results 

NumberFormat number = NumberFormat.getNumberInstance(); 

String message = 
      ("\n" + "The factorial of " + num + " is " + number.format(factorial) + "." + "\n"); //create message 

System.out.println(message); // Output the formatted message 

System.out.print ("Continue (y/n): "); //prompt users for input 
choice = sc.next(); 
} // End if 
Verwandte Themen