java - 5!是 120,但输出为 1!是120?

标签 java while-loop factorial

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

根据我对Java阶乘的理解,5! = 5*4*3*2*1 = 120。 因此,当我在本练习中计算 Java 阶乘时,我输入 5 作为用户输入,以测试我是否能够正确计算 Java 阶乘。但输出却是1!是 120。这是我的代码的一部分,仅供引用:

 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吗? 预先感谢您,我正在努力解决这个问题。

最佳答案

您正在递减 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

关于java - 5!是 120,但输出为 1!是120?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46439093/

相关文章:

Python If 与 While?

algorithm - 阶乘时间算法示例 O( n! )

java - 如何使用递归将可视化打印为数字的阶乘

java - 为什么 JList 和 TextArea 组件不使用 GridBagLayout 调整大小?

java - Mysql 5.5 与 hibernate 4 order by 不一致

java - JAXB 使用 Maven 插件编码 CDATA

python - 为什么 Python 的 math.factorial 不能很好地处理线程?

java - 使用 Java 对 mysql 数据库进行简单备份和恢复

c - 使用 getchar() 和 putchar() 评估字符序列

PHP While 循环只显示最后一行