-1

我对这段代码有疑问。它是一个程序的一部分,用于计算您在某些计算器上称为 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));
    }
}
4

2 回答 2

2

factorial(n)在检查是否n > 0. 移动线

long n_fact = factorial(n);

else块内。

于 2012-10-31T22:05:25.797 回答
0

将此行移动到else块中:

    long n_fact = factorial(n);

因为它被触发了even when n=0 or n < 0,因为你n > 0在上面的调用之后检查,这是你不想要的。我怀疑 this(n <=0) 是否在您的factorial()方法中得到正确处理。

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

于 2012-10-31T22:06:35.027 回答