我对这段代码有疑问。它是计算在某些计算器上称为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));
}
}
答案 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;