0

我正在用 java 循环做一个阶乘问题,它问 1+1/2!+1/3!+...+1/n!,n 是肯定的,我使用“while”来制作它,但是代码什么都没有运行:</p>

    public static void main(String[] args) {

    double sum=0,a=1;
    int n=Integer.parseInt(args[0]);
    while(n>0){

        a=a*n;
        sum=sum+1.0/a;
    }
    System.out.print(sum);

}

请帮忙:)

4

4 回答 4

6
while(n>0){
    a=a*n;
    sum=sum+1.0/a;
}

你什么时候换n?你没有。条件将始终得到满足,您将永远不会退出循环。考虑改变n循环体中的值。

 Iteration |   n
-----------+--------
     1     |   n      > 0 ? Yes
     2     |   n      > 0 ? Yes
     3     |   n      > 0 ? Yes
    ...    |
    ...    |
  Forever  |   n      > 0 ? Yes
于 2013-08-28T13:55:57.217 回答
1

正如其他人指出的那样,您的原始 while 循环永远不会结束,因为 n 的值永远不会改变,这意味着 while 条件将始终为真(假设原始值大于零)。

这可能是您想要实现的目标吗?

public static void main(String[] args)
{
    double sum = 0, a = 1;
    int n = Integer.parseInt(args[0]);
    for ( int i = 1; i <= n; i++ )
    {
        a *= i;
        sum = sum + (1.0 / a);
    }
    System.out.print(sum);
}
于 2013-08-28T14:11:56.980 回答
0

您的代码等于:

while(true){

    a=a*n;
    sum=sum+1.0/a;
}

你不改变n价值,n一定是<=0break你的loop

于 2013-08-28T13:57:42.803 回答
0

为什么不尝试一个for循环让我们说

public static void main(String[] args) {

    double sum=0;
    int  n=Integer.parseInt(args[0]);
    for(double a=1;a<=n;a++){

        sum=sum+1.0/a;
    }
    System.out.print(sum);

}
于 2013-08-28T14:19:29.250 回答