这个程序的逻辑有什么问题?

时间:2012-10-31 22:03:02

标签: java

我对这段代码有疑问。它是计算在某些计算器上称为nPr的程序的一部分。它编译没有错误,但每次我运行它并设置n = 0我得到一个看似无穷无尽的错误消息列表。为什么不能打印出“错误!”并像我编程一样终止程序?

{
    System.out.print("n = ");
    int n = j.nextInt();
    System.out.print("r = ");
    int r = j.nextInt();
    long n_fact = factorial(n);
    if ( ( (n - r) <= 0 ) || (n <= 0) || (r < 0) )
    {
        System.out.println("Error!");
        System.exit(0);
    }
    else
    {
        long nr_fact = factorial(n - r);
        long nPr = n_fact / nr_fact;
        NumberFormat f = NumberFormat.getNumberInstance();
        System.out.println("nPr = " + f.format(nPr));
    }
}

2 个答案:

答案 0 :(得分:2)

您在检查factorial(n)之前是否正在调用n > 0。移动线

long n_fact = factorial(n);

else块内。

答案 1 :(得分:0)

else区块中移动此行:

    long n_fact = factorial(n);

正在触发even when n=0 or n < 0,因为您在上述通话后检查了n > 0,这是您不想要的。 我怀疑你的factorial()方法是否正确处理了这个(n <= 0)。

或者,在n方法中对factorial(n)进行检查和处理,即如果n = 0,则返回1,如果n <0,则返回错误(抛出异常)。 0;