首页 > 解决方案 > 我需要更改此函数以计算正确的平均值吗?

问题描述

我对 Java 很陌生,我正在尝试创建一个类Average,其对象计算可以首先通过该addNumber方法添加到其中的多个整数(另一个类 Integers 的对象)的平均值。

我可以看到正确的数字被添加到对象中并且计数器也可以正常工作,但我似乎无法弄清楚如何计算总和,ArrayList以便我可以通过除法计算这些数字的平均值我的柜台总和。

对于此处的这一行,我不断收到 Integer 无法转换为 int 的错误消息:

for (int i : variables)

这是有道理的,但到目前为止,我尝试将其转换为一种的方法似乎都不起作用。我实际上从这里( https://coderanch.com/t/673671/java/correctly-Sum-contents-ArrayList-Integer )复制了那一行代码,但对我来说这似乎不起作用。我还需要进口什么import java.util.*;吗?

public class Average
{
    // Ints given by the user
    private ArrayList<Integer> variables;
    private int count = 0;
    private int sum;
    
    // Resulting average
    private int average;
   

    /**
     * When creating object, takes numbers from class Integer
     */
    public Average()
    {
        variables = new ArrayList<Integer>();
    }
    /**
     * Add variables to calculate averages from
     */
    
    public void addNumber(Integer newNumber)
    {
        variables.add(newNumber);
        count ++;      
    }
    /**
     * Method to calculate the average of the given variables
     */
    
    public int calcAverage(ArrayList<Integer> variables)
    {
        for (int i : variables)
        {
            sum += i;
        }
        return sum;
        average = sum / count;
    }    
}

标签: javaarraylistbluej

解决方案


您在此处共享的代码存在一些问题。

首先,从 API 的角度来看,如果类有数据成员,为什么calcAverage要把 anArrayList<Inetger>作为参数?variables这样的方法应该或者不static带参数并计算成员的平均值。

其次,从编码的角度来看,它返回了sum赋值之前的平均值,使该行average = sum / count代码无法访问,并导致编译错误。

第三,从数学的角度来看,由于sumcountints,它们的除法将作为整数除法执行,在大多数情况下会给出错误的结果。

最后,Average该类没有任何访问方法来检索添加到它的数字,或者修改方法来修改这个列表,而不是添加数字到它。考虑到这个 API,保存一个数字列表可能是多余的。相反,您可以只保留要添加的数字的sumcount,并根据需要返回它们的平均值:

public class Average {
    private int count = 0;
    private int sum = 0;
    
    /**
     * Add variables to calculate averages from
     */
    public void addNumber(int newNumber) {
        sum += newNumber;
        count++;
    }

    /**
     * Method to calculate the average of the given variables
     */
    public double calcAverage() {
        return ((double) sum) / count;
    }    
}

推荐阅读