5!是120,但输出读数为1!是120?

时间:2017-09-27 03:38:55

标签: java while-loop factorial

说明:编写一个程序,让用户输入N并输出N! (意味着N *(N-1)(N-2) ... * 2 * 1)。提示:将变量totalValue初始化为N,并使用循环变量i从N-1减少到1。

根据我对Java factorials的理解,5! = 5 * 4 * 3 * 2 * 1 = 120。 因此,当我在本练习中计算Java因子时,我输入5作为用户输入来测试我是否能够正确计算Java因子。但输出结果为1!这是我的代码的一部分,只是为了一瞥:

 userInt = scnr.nextInt(); 
 // FIXME: Ask user to input an integer, store in userInt

 totalVal = userInt;

 while (userInt > 1) {
     userInt = userInt - 1;
     totalVal = userInt * totalVal;

 }   // FIXME: Add while loop that counts down to 1, updating totalVal
 System.out.println(userInt + "! is " + totalVal);
 } //After typing 5 and clicking Run, it shows 1! is 120

根据我对评论的理解// FIXME:要求用户输入一个整数,存储在userInt //中,我输入' 5'作为试图计算阶乘的测试。所以在键入5作为用户输入时,为什么它不是5呢!是120?为什么它不是5!是120?

是否有可能从我的代码中解释为什么它是1!是120而不是5!是120?或者为什么它应该是5!是120,因为我一直认为它是? 提前谢谢你,我试图解决这个问题。

3 个答案:

答案 0 :(得分:3)

您递减userInt直到达到1.您可以通过添加和使用持有者整数变量来解决此问题。

userInt = scnr.nextInt(); 

int holder = userInt;

totalVal = userInt;

while (userInt > 1) {
 userInt = userInt - 1;
 totalVal = userInt * totalVal;

}   // FIXME: Add while loop that counts down to 1, updating totalVal
System.out.println(holder + "! is " + totalVal);
} //After typing 5 and clicking Run, it shows 1! is 120

答案 1 :(得分:0)

while循环后,userInt变为1

userInt = userInt - 1; < =重复直到它变为1

在另一个变量中备份userInt。

答案 2 :(得分:0)

您正在改变while循环中的userInt变量,因此在打印时总是打印1。

在while循环之前将user int存储在另一个变量中,然后将其打印出来。