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 条件は常に true になります (元の値がゼロより大きいと仮定します)。

これはおそらくあなたが達成しようとしていることですか?

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

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 に答える