我制作了一个程序来总结像4! + 3! + 2! + 1! = 33
这样的java中的阶乘,但它不起作用。谁能帮忙解释一下原因?
import javax.swing.JOptionPane;
public class fac {
public static void main(String[] args) {
int sum = 0, fact, i, j;
fact = Integer.parseInt(JOptionPane.showInputDialog("ENTER NO"));
for (i = fact; i > 1; i--) {
for (j = fact - 1; j > 0; j--)
fact = fact * j;
sum = sum + fact;
}
sum = sum + 1;
System.out.print("SUM OF FACTORIAL = "+sum);
}
}
答案 0 :(得分:1)
您在外循环中重复计算事实的因子。内循环的起始值是错误的。
但您应该使用调试器自己发现此错误。
答案 1 :(得分:0)
这是方法可能派上用场的地方。首先是一个外循环因为你倒计时(在这个例子中来自4
)。
static final int NR = 4; //for example
static void main(String[] args) {
int total = 0;
for (int i = NR; i > 0; i--)
total += calculateFactorial(i); //i += j; is the same as i = i + j;
System.out.println("Answer: " + total);
}
现在它看起来更容易,对吗?代码突然变得可读。现在,对于calculateFactorial(int nr)
,我们所要做的就是计算4 * 3 * 2 * 1
(对于4
的阶乘,即:)
public static int calculateFactorial(int nr) {
int factorialTotal = 1;
for (int i = nr; i > 0; i--)
factorialTotal *= i; //i *= j; is the same as i = i * j;
return factorialTotal;
}
方法只是使代码易于读写。我建议你读一本像Clean Code
这样的书