2016-06-10 6 views
-4

У меня есть программа, которая должна генерировать факториал любого заданного числа n.Java Factorial с использованием GUI возвращает только первый вывод

Когда пользователь вводит число, выход является факториалом для каждого числа, введенного после этого в калькулятор. Код компилируется нормально, но калькулятор не будет вычислять какие-либо факториалы, кроме первого. Поскольку я не могу использовать рекурсию для решения этой проблемы, отправьте только ответы без использования рекурсии.

Вот код:

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); 

} 
} 

ответ

2

Этот код

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

необходимо повторить для каждого входа.

Я предлагаю, чтобы ваш GF помещал это в метод, который можно вызвать, и метод вернет результат.

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

Вам необходимо сбросить число и факториал, чтобы получить нужный факториал.

Также я хотел бы использовать контур с управляемой головой. Потому что легче понять, что происходит. Также, возможно, не помещайте Inputdialog и Parsing строки в int в одну строку, это упрощает обработку неправильных пользовательских входов, что вы также должны делать. Здесь мое решение:

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 = ""; 
      } 
     } 
    }