Java:将整数除以双精度不起作用


public class SumAndAverage {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int sum = 0;
        int num;
        for(num = 0; num <= 100; num++){ 
            sum += num; 
        }
        double average = ((double)sum) / num;
        System.out.println("The sum is " + sum);
        System.out.println("The average is " + average);
    }
}

结果:

总和为 5050平均值为 50.0

怎么了:

5050/100 = 50.5不50,0

当这个循环结束时

for(num = 0; num <= 100; num++){ 

num101,而不是100。因为发生的事情是测试条件直到它是假的,而这发生在num>100 .

你弄错了。当您不使用变量作为循环检查时(以及当您通常使用幻数反模式时),并在以后重用它们时,就会发生这种情况。这样你就可以确定你将实际使用什么价值。

public class SumAndAverage {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int sum = 0;
        int num;
        int max = 100;
        for(num = 0; num <= max; num++){ 
            sum += num; 
        }
        double average = ((double)sum) / max;
        System.out.println("The sum is " + sum);
        System.out.println("The average is " + average);
    }
}

您的数字等于 101,而不是 100...

当它脱离循环时,变量 num 将为 101。所以你需要手动减去一个或以下,可以少一次迭代更好地完成同样的工作

for(num = 0; num < 100; ){ 
    sum += ++num; 
}

完整程序

public class SumAndAverage {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int sum = 0;
    int num;
    for(num = 0; num < 100; ){ 
        sum += ++num; 
    }
    double average = ((double)sum) / num;
    System.out.println("The sum is " + sum);
    System.out.println("The average is " + average);
}
}

检查一下。