Java中的阶乘总和

时间:2014-06-04 19:48:59

标签: java

我制作了一个程序来总结像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);
    }
}

2 个答案:

答案 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

这样的书