我需要更改此函数的哪些内容才能计算出正确的平均值?
What do I need to change for this function to calculate the corrrect average?
我是 Java 的新手,我正在尝试创建一个 class Average
,其对象计算多个整数的平均值(另一个 class 整数) 可以先通过 addNumber
方法添加到它。
我可以看到正确的数字被添加到对象中并且计数器也正常工作,但我似乎无法弄清楚如何计算 ArrayList
的总和,所以我然后可以通过将其总和除以我的计数器来计算这些数字的平均值。
对于此处的这一行,我一直收到无法将 Integer 转换为 int 的错误消息:
for (int i : variables)
这是有道理的,但到目前为止 none 我尝试将其转换为一种方法似乎有效。我实际上从这里 (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;
}
}
您在此处共享的代码存在一些问题。
首先,从API的角度来看,如果class具有variables
数据成员,为什么calcAverage
将ArrayList<Inetger>
作为参数?这种方法应该是 static
或不带参数并计算成员的平均值。
其次,从编码的角度来看,它return在sum
之前赋值给平均值,使得average = sum / count
行代码无法访问,并导致编译错误。
第三,从数学的角度来看,由于sum
和count
是int
,所以它们的除法会按integer division进行,给你错误的结果大多数情况下。
最后,Average
class 没有任何访问方法来检索添加到它的数字,或者除了向它添加数字之外修改这个列表的修改方法。考虑到这个 API ,持有一个数字列表可能是多余的。相反,您可以只保留要添加的数字的 sum
和 count
,以及 return 它们的平均需求:
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;
}
}
我是 Java 的新手,我正在尝试创建一个 class Average
,其对象计算多个整数的平均值(另一个 class 整数) 可以先通过 addNumber
方法添加到它。
我可以看到正确的数字被添加到对象中并且计数器也正常工作,但我似乎无法弄清楚如何计算 ArrayList
的总和,所以我然后可以通过将其总和除以我的计数器来计算这些数字的平均值。
对于此处的这一行,我一直收到无法将 Integer 转换为 int 的错误消息:
for (int i : variables)
这是有道理的,但到目前为止 none 我尝试将其转换为一种方法似乎有效。我实际上从这里 (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;
}
}
您在此处共享的代码存在一些问题。
首先,从API的角度来看,如果class具有variables
数据成员,为什么calcAverage
将ArrayList<Inetger>
作为参数?这种方法应该是 static
或不带参数并计算成员的平均值。
其次,从编码的角度来看,它return在sum
之前赋值给平均值,使得average = sum / count
行代码无法访问,并导致编译错误。
第三,从数学的角度来看,由于sum
和count
是int
,所以它们的除法会按integer division进行,给你错误的结果大多数情况下。
最后,Average
class 没有任何访问方法来检索添加到它的数字,或者除了向它添加数字之外修改这个列表的修改方法。考虑到这个 API ,持有一个数字列表可能是多余的。相反,您可以只保留要添加的数字的 sum
和 count
,以及 return 它们的平均需求:
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;
}
}