【问题标题】:Java, averaging a list of numbersJava,平均数字列表
【发布时间】:2012-07-11 20:38:13
【问题描述】:

在下面的 Java 代码中,我的平均温度是小数点后 1 位。

例如,不是69.0,而是6.9

输入可以是任意 10 个数字。所以假设我输入了 10 个温度,每个 1 是 10 度。 10 个输入的总数为 100,因此平均值应为 10,但我收到的平均值为 1.0。

代码:

import java.util.Scanner;
public class NumberAboveAverage {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int TotalTemps = 10;
        double[] numbers = new double[TotalTemps];
        double sum = 0;
        double average = 0;
        double max = 0;
        for (int n = 0; n < numbers.length; n++) {
            System.out.print("Enter a temperature: ");
            numbers[n] = input.nextInt();

            if (numbers[n] > max) {
               max = numbers[n];
            }
            sum = numbers[n];
        }

        for (int i = 0; i < numbers.length; i++) {
            sum = numbers[i];
        }

        average = sum / 10;    //average is not an average of the numbers.
        System.out.println("Average temp = " + average);

        int count = 0;
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] > average) {
               count++;
            }
        }
        System.out.println(count + " days were above average");
    }
}

【问题讨论】:

  • 如果没有真实数据可以查看,没有人可以帮助您。请显示您的输入数据、结果和您的预期。此外,您的问题可能是由于浮点数无法准确表示十进制数字这一众所周知的问题,再加上舍入错误。
  • @jaielob 这是因为您没有将它们加在一起。它到达末尾并将 10 除以总数 (10),而不是总和 (100) 除以总数。尝试更多案例,您会发现这就是原因。

标签: java average


【解决方案1】:

您实际上并没有将这些数字相加。

应该是sum += numbers[i];

不是sum = numbers[i];

您似乎还试图这样做两次,这是不必要的。

【讨论】:

  • 伙计,我一直对人们在这里回答问题的速度感到惊讶...是的,这很容易解决,但是,我通读了该程序,已经有 3 个答案...
  • 啊,我现在明白了。谢谢你。我现在已经编码了 6 个小时,我的头在旋转 LOL。它也无助于我是 Java 的初学者。
【解决方案2】:

您缺少+

sum = numbers[n];

需要

sum += numbers[n];

这无济于事,

 for (int i = 0; i < numbers.length; i++) {
    sum = numbers[i];
 }

【讨论】:

    【解决方案3】:

    你求和两次(第二个 for 循环)并错误地使用:
    sum = numbers[n];
    而不是:
    sum += numbers[n];

    您应该将代码更改为:

    ...
             for (int n = 0; n < numbers.length; n++) {
                System.out.print("Enter a temperature: ");
                numbers[n] = input.nextInt();
    
                if (numbers[n] > max) {
                   max = numbers[n];
                }
                sum += numbers[n];
             }
    
             // SECOND FOR LOOP REMOVED !!!
    
             average = sum / 10;
             System.out.println("Average temp = " + average);
    
            ...
    

    【讨论】:

    • 没有什么比不努力解释就用勺子喂答案的感觉。
    • @HovercraftFullOfEels 你对我来说太快了 :) 再检查一次!
    • @alfasin 确实没有必要完整地发布代码。它只是让你看起来像是在给他答案。
    【解决方案4】:

    替换

    average = sum / 10;
    

    average = sum / 10.0;
    

    【讨论】:

    • 这无关紧要,因为 sum 是一个双精度数并包含双精度数。
    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多