无法获得这个“Factorial”计划的预期输出?

时间:2014-06-10 02:14:17

标签: java factorial

我的名字是山姆,我是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)的事实。相反,我得到零。所有输入都会发生这种情况。

4 个答案:

答案 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会是什么。

编辑:我的编辑错误。