说明:编写一个程序,让用户输入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,因为我一直认为它是? 提前谢谢你,我试图解决这个问题。
答案 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存储在另一个变量中,然后将其打印出来。