我正在创建一个名为getAveragePrice的方法,我需要它来计算未定义数组列表中的值的平均值(只能在测试/实现所述方法时定义)。
public double getAveragePrice() {
double sum = 0;
int x = 0; //counting variable
do {
这就是我现在的开始。我知道每次将一个值加到总和上时,x的计数需要增加1,因此该方法知道将最终总和除以什么。我唯一的问题是如何设置一个do循环来给出数组列表中值的总和。
答案 0 :(得分:2)
您可以使用Java 8流找到一行中的平均值:
List<Double> vals;
// initialize vals
double avg = vals.stream().mapToDouble(Double::doubleValue).sum() / vals.size();
你也可以在这里进行迭代,这是更多的工作:
double sum = 0.0;
for (double val : vals) {
sum += val;
}
double avg = vals.size() > 0 ? sum / vals.size() : 0.0d;
答案 1 :(得分:0)
你应该遍历列表中的每个元素。
public double getAveragePrice() {
double sum = 0;
int x = 0; //counting variable
do {
sum += list.get(x);
x++;
} while (x < list.size());
int average = sum / x;
return average;
}
基本上,你开始循环为x = 0,每个循环你添加该索引的值,然后将x增加1.然后检查x是否小于元素的总数。如果是,则列表中有更多元素要添加。如果没有,那么你已经总结了所有元素。由于您添加了所有元素,因此您只需将其除以x,然后将其作为平均值返回。
答案 2 :(得分:0)
你可以将do.while条件作为:
do{
Sum += arr[x];
x++;
}While(x<arr.length)
然后为avg:
Avg = sum/x
答案 3 :(得分:0)
或者你可以使用for(each)而不是do / while:
List<Double> values; // List<double> is no good apparently
double average = 0;
for (Double value : values) {
average += value.doubleValue(); // I miss PHP ;)
}
average /= values.size();
这主要是一种风格化的东西,但我喜欢避免显式使用数组索引来访问集合(列表,数组,无论语言是什么),当你不关心元素的顺序时,不要## 39;打算改变他们中的任何一个。
这意味着你没有一个计数器/指针变量,你以后实际上不需要它(你只关心它在循环中的价值)并且你不会意外地弄乱您的原始数据(&#39; ==&#39;至&#39; =&#39;错字是经典的)。
警告:我不会写很多Java,所以也许foreach不赞成?
编辑:我没有写足够的Java来正确使用它的集合。
答案 4 :(得分:0)
Java 8无环解决方案:
myDoubleList.stream()
.mapToDouble(Double::doubleValue)
.average()
.orElse(Double.NaN);
答案 5 :(得分:0)
这是21世纪。无需使用任何循环。使用Scala并编写
def exercise5(a: Array[Double]): Double = {
a.sum / a.length
}