5!是120,但输出读数为1!是120?
问题描述:
说明:编写一个让用户输入N并输出N的程序! (表示N *(N-1)(N-2) ... * 2 * 1)。提示:初始化变量totalValue为N,并使用从N-1到1的循环变量i。5!是120,但输出读数为1!是120?
从我对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,因为我一直假设它是? 预先感谢您,我正试图围绕这一点来解决我的问题。
答
while循环后,userInt变为1
userInt = userInt - 1; < =重复,直到它变为1
在另一个变量中备份userInt。
答
您在while循环中突变了userInt变量,所以在打印时它总是打印1。
在while循环之前将用户int存储在另一个变量中,并打印出来。
答
您正在递减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
因为你递减'userInt'直到它达到1.什么让你感到困惑? – shmosel
递减时,纠正我,如果我错了,也就是说,我=我-1?所以这就是说在我的代码中它是1!因为userInt = userInt - 1是120?现在为什么它是1是有道理的!是120.我一开始感到困惑,因为我认为5! = 5 * 4 * 3 * 2 * 1 = 120,我假设输出应该显示为5!是120 – acruz30
完全正确。 – shmosel