逻辑错误在哪里?

时间:2014-10-12 15:03:51

标签: java

我正在尝试计算从1/(1^2)1/(n^2)的所有数字的总和,其中n是用户输入的整数。我可以编译程序,但我不知道我在哪里犯了逻辑错误,我得到的唯一结果是1.0。提前谢谢!

public static double compute_series (int num) 
{        
    double sum = 0, denom = 0;
    for (int n=1; n <= num; n++){          
        denom  = 1/n*n;          
        sum = sum + denom;        
    }        
    return(sum);      
}

2 个答案:

答案 0 :(得分:4)

你正在进行分组。

denom = 1/n*n会为0的所有n>1(自1/n < 1)和1返回n==1。因此,你获得的总和是1。

将您的代码更改为

denom = 1.0/(n*n);

答案 1 :(得分:0)

1nint s,因此1/n*n使用整数除法进行评估,并且始终被截断为0。您可以使用double字面值1.0代替1来避免此问题。

此外,由于除法和乘法具有相同的优先顺序,因此您应该在乘法周围使用括号:

public static double compute_series (int num) {
    double sum = 0, denom = 0;

    for (int n=1; n <= num; n++){
        denom  = 1.0/(n*n); // Note the changes here
        sum += denom;
    }
    return(sum);
}