Java 如何使用do循环查找数组列表中双值的平均值?

Java 如何使用do循环查找数组列表中双值的平均值?,java,arrays,loops,average,do-loops,Java,Arrays,Loops,Average,Do Loops,我正在创建一个名为getAveragePrice的方法,我需要它来计算未定义数组列表中的值的平均值(仅在所述方法的测试/实现过程中定义) 这就是我现在的开始。我知道每次向总和添加一个值时,x的计数都需要增加1,这样该方法就知道最终总和除以什么。我唯一的问题是如何设置do循环,以获得数组列表中的值之和。您可以使用Java 8 streams在一行中找到平均值: List<Double> vals; // initialize vals double avg = vals.stream(

我正在创建一个名为getAveragePrice的方法,我需要它来计算未定义数组列表中的值的平均值(仅在所述方法的测试/实现过程中定义)


这就是我现在的开始。我知道每次向总和添加一个值时,x的计数都需要增加1,这样该方法就知道最终总和除以什么。我唯一的问题是如何设置do循环,以获得数组列表中的值之和。

您可以使用Java 8 streams在一行中找到平均值:

List<Double> vals;
// initialize vals
double avg = vals.stream().mapToDouble(Double::doubleValue).sum() / vals.size();

您可以使用Java 8 streams在一行中找到平均值:

List<Double> vals;
// initialize vals
double avg = vals.stream().mapToDouble(Double::doubleValue).sum() / vals.size();

您应该遍历列表中的每个元素

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;
}
public double getAveragePrice(){
双和=0;
int x=0;//计数变量
做{
sum+=list.get(x);
x++;
}而(x

基本上,你从x=0开始循环,每个循环你加上这个索引的值,然后把x增加1。然后检查x是否小于元素总数。如果是,那么列表中还有更多的元素要添加。如果不是,那么您已经对所有元素求和了。由于添加了所有元素,只需将其除以x,然后将其作为平均值返回。

您应该循环遍历列表中的每个元素

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;
}
public double getAveragePrice(){
双和=0;
int x=0;//计数变量
做{
sum+=list.get(x);
x++;
}而(x

基本上,你从x=0开始循环,每个循环你加上这个索引的值,然后把x增加1。然后检查x是否小于元素总数。如果是,那么列表中还有更多的元素要添加。如果不是,那么您已经对所有元素求和了。由于添加了所有元素,只需将其除以x,然后将其作为平均值返回。

您可以将do.while条件设置为:

do{
        Sum += arr[x];
        x++;
 }While(x<arr.length)

您可以将do.while条件设置为:

do{
        Sum += arr[x];
        x++;
 }While(x<arr.length)

或者,您可以使用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();
列出值;//名单显然不好
双平均=0;
for(双值:值){
average+=value.doubleValue();//我错过了PHP;)
}
平均/=值。大小();
这主要是一种风格上的东西,但我喜欢避免在不关心元素顺序且不打算更改任何元素时显式使用数组索引来访问集合(列表、数组,无论语言如何调用它们)

这意味着您没有一个稍后实际上不需要的计数器/指针变量(您只关心它在循环过程中的值),您也不会意外地弄乱原始数据(从“==”到“=”的拼写是一个经典)

注意:我不太会写Java,所以foreach可能不受欢迎


编辑:我没有编写足够的Java来正确使用其集合。

或者,您可以使用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();
列出值;//名单显然不好
双平均=0;
for(双值:值){
average+=value.doubleValue();//我错过了PHP;)
}
平均/=值。大小();
这主要是一种风格上的东西,但我喜欢避免在不关心元素顺序且不打算更改任何元素时显式使用数组索引来访问集合(列表、数组,无论语言如何调用它们)

这意味着您没有一个稍后实际上不需要的计数器/指针变量(您只关心它在循环过程中的值),您也不会意外地弄乱原始数据(从“==”到“=”的拼写是一个经典)

注意:我不太会写Java,所以foreach可能不受欢迎


编辑:我没有编写足够的Java来正确使用其集合。

Java 8无环解决方案:

myDoubleList.stream()
  .mapToDouble(Double::doubleValue)
      .average()
      .orElse(Double.NaN);

Java 8无环解决方案:

myDoubleList.stream()
  .mapToDouble(Double::doubleValue)
      .average()
      .orElse(Double.NaN);

现在是21世纪。不需要使用任何循环。使用Scala&只需编写

def exercise5(a: Array[Double]): Double = {
    a.sum / a.length
}

现在是21世纪。不需要使用任何循环。使用Scala&只需编写

def exercise5(a: Array[Double]): Double = {
    a.sum / a.length
}

还有一件事:在空列表的情况下,您可能需要检查计数变量是否为零,以避免被零除。这是真的,但我认为由于OP使用了do…while循环,他们可能知道列表不是空的,否则list.get(0)将抛出错误。是的,我在回答中部分假设了这一点,这只是一个很好的选择,不必拥有。还有一件事:在空列表的情况下,您可能需要检查计数变量是否为零,以避免被零除。这是真的,但我认为由于OP使用了do…while循环,他们可能知道列表不是空的,否则list.get(0)将抛出错误。是的,在我的回答中,我部分地假设了这一点,这只是一个不必拥有的好东西。你不能使用
列表
,你需要一个对象(尽管在更高版本的Java中可能支持原语列表)。对不起,现在习惯于C。列表?你不能使用
列表
,你需要一个对象(虽然Java的更高版本可能支持原语列表)。对不起,现在习惯C#了。List?我在想这个问题。如果因为val真的很大,所以你的总和达到无穷大怎么办?你的sum/vals.size()不仅仅是无穷大?在和达到无穷大之前,我想我们会在double中得到某种溢出。不管怎样,它会弄乱平均,不是吗。我可以看到唯一的解决方案是使用BigDecimal并除以它。我在想这个。如果你的和达到无穷大,因为val真的很大呢?你的和/v会吗als.size()不仅仅是无穷大?在和达到无穷大之前,我想我们会在double中得到某种溢出。不管怎样,它会弄乱平均,不是吗。我可以看到唯一的解决方案是使用BigDecimal并除以它。