【问题标题】:5! is 120, but output reads 1! is 120?5!是 120,但输出读数为 1!是120?
【发布时间】:2017-09-27 11:44:43
【问题描述】:

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

根据我对 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。你有什么困惑?
  • 递减的时候,如果我错了,请纠正我,也就是说,i = i -1?所以这就是说在我的代码中它是 1!因为 userInt = userInt - 1 是 120?现在为什么它是 1 是有道理的!是120。起初我很困惑,因为我以为是5! = 5*4*3*2*1 = 120,我假设输出应该显示为 5!是 120
  • 完全正确。
  • 你可以用for代替while

标签: java while-loop factorial


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    while 循环后,userInt 变为 1

    userInt = userInt - 1;

    在另一个变量中备份 userInt。

    【讨论】:

      【解决方案3】:

      你在你的 while 循环中改变你的 userInt 变量,所以它总是会在打印时打印 1。

      在您的 while 循环之前将用户 int 存储在不同的变量中并打印出来。

      【讨论】:

        猜你喜欢
        • 2016-11-29
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 1970-01-01
        • 2019-08-17
        相关资源
        最近更新 更多