我的名字是山姆,我是java的初学者。我实际上已经尝试了这个“阶乘”程序,我无法看到逻辑出错了......我没有得到预期输出,谁能告诉我为什么?在此之前,感谢所有用户:)
阶乘:
import java.util.*;
class factorial {
public static void main(String[] args) {
int i;
System.out.println("enter a number");
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int x=n;
while(x!=0) {
x=x*(n-1);
n--;
}
System.out.println(x);
}
}
当我输入(例如)5时,我希望获得5(120)的事实。相反,我得到零。所有输入都会发生这种情况。
答案 0 :(得分:6)
如果您真的想学习,请逐行开始运行代码,例如:
int n = 5;
int x = n;
while (x != 0) {
x = x * (n - 1);
n--;
}
从一张纸开始:
x | n
-----+-----
|
|
|
|
并且,当您“执行”每一行时,记下新值。做到这一点,你的问题就在哪里。它还将使您成为更好的开发人员。
在您完成此操作之前,请不查看此答案的其余部分,然后尝试解决此问题。
一旦你理解了问题并(希望)修复了它,请将你的解决方案与下面的解决方案进行比较:
int n = 5; // input value.
int x = 1; // initial accumulator set to identity (n * 1 = n).
while (n != 0) { // use all values from n down to 1 (inclusive).
x = x * n; // multiply accumulator by that value.
n--; // get next value.
}
答案 1 :(得分:0)
int x = n;
while(x!=0) {
x=x*(n-1);
n--;
}
结果将为0,因为你的循环将一直有效,直到x = 0,当n变为0时,x在循环中得到0的值,在while循环条件下尝试n!= 0
答案 2 :(得分:0)
你只需要将While循环条件改为while(n!= 1),因为在你的情况下当n变为1然后x = x *(n-1);将导致x乘以0。
答案 3 :(得分:-2)
试试这段代码:
public static void main(String[] args)
{
int i;
System.out.println("enter a number");
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int x=1;
while(n!=0)
{
x*=(n);
n--;
}
System.out.println(x);
}
当n = 1时,你的while循环将你的答案乘以0,我们都知道乘以0会是什么。
编辑:我的编辑错误。