2016-06-10 2 views
-4

J'ai un programme qui devrait générer la factorielle d'un nombre donné n.Java Factorial utilisant GUI ne retourne que la première sortie

Lorsque l'utilisateur entre un nombre, la sortie est la factorielle pour chaque nombre entré après cela dans la calculatrice. Le code compile bien mais la calculatrice ne calculera aucune factorielle sauf pour la première. Comme je ne peux pas utiliser la récursion pour résoudre ce problème, veuillez ne poster que des réponses sans utiliser de récursivité.

Voici le code:

import javax.swing.JOptionPane; 

public class Assignment7 
{ 
public static void main(String[] args) 
{ 
int number1; 
int factorial = 1; 
String message; 

number1 = Integer.parseInt(JOptionPane.showInputDialog("Enter a positive integer that you would like factored (Type \"1\" to stop) : ")); 


for(int i = 1; i <= number1; i++) 
{ 
factorial = factorial * i; 


} 



do 
{ 
message = String.format("The factorial of %d is: %d", number1, factorial); 
JOptionPane.showMessageDialog(null, message); 
number1 = Integer.parseInt(JOptionPane.showInputDialog("Enter a positive integer that you would like factored (Type \"1\" to stop) : ")); 

} 
while(number1 != 1); 

} 
} 

Répondre

2

Ce code

for(int i = 1; i <= number1; i++) 
{ 
    factorial = factorial * i; 
} 

doit être répété pour chaque entrée.

Je suggère que votre GF mettre cela dans une méthode qui peut être appelée et la méthode retournera le résultat.

0
import javax.swing.JOptionPane; 

public class Assignment7 
{ 
public static void main(String[] args) 
{ 
int number1; 
int factorial = 1; 
String message; 

number1 = Integer.parseInt(JOptionPane.showInputDialog("Enter a positive integer that you would like factored (Type \"1\" to stop) : ")); 


for(int i = 1; i <= number1; i++) 
{ 
factorial = factorial * i; 


} 



do 
{ 
message = String.format("The factorial of %d is: %d", number1, factorial); 
JOptionPane.showMessageDialog(null, message); 
number1 = Integer.parseInt(JOptionPane.showInputDialog("Enter a positive integer that you would like factored (Type \"1\" to stop) : ")); 
factorial = 1; 
for(int i = 1; i <= number1; i++) 
{ 
factorial = factorial * i; 
} 
} 
while(number1 != 1); 

} 
} 
0

Vous devez réinitialiser le nombre et la factorielle pour obtenir le bon factoriel.

Aussi je envisagerais d'utiliser une boucle contrôlée par la tête. Parce qu'il est plus facile de comprendre ce qui se passe. Aussi peut-être ne pas mettre le Inputdialog et l'analyse de la chaîne à int dans une ligne, il est beaucoup plus facile de gérer les mauvaises entrées d'utilisateur, ce que vous devriez également faire. Voici ma solution:

import javax.swing.JOptionPane; 

    class Assignment7 { 
     public static void main(String[] args) { 
      int number1 = 0; 
      int factorial = 1; 
      String message; 

      while (number1 != 1) { 
       String positiveInteger = JOptionPane.showInputDialog("Enter a positive integer that you would like factored (Type \"1\" to stop) : "); 
    // You could check if there was a user-input and also later check if it's a number. 
       if (positiveInteger.length() > 0) { 
        number1 = Integer.parseInt(positiveInteger); 
       } 

       for (int i = 1; i <= number1; i++) { 
        factorial = factorial * i; 
       } 

       message = String.format("The factorial of %d is: %d", number1, factorial); 
       JOptionPane.showMessageDialog(null, message); 

       //Reset everything 
       number1 = 0; 
       factorial = 1; 
       message = ""; 
      } 
     } 
    }