一般情况下对数组计算均值,可以采用对数组求和,再除以数组长度。
实现代码:
public double doubleArrAverage(double[] arr) {
double sum = 0;
for(int i = 0;i < arr.length; i++) {
sum += arr[i];
}
return sum / arr.length;
}
但其中存在最大问题就是数组求和,如果数组内元素值较大或者数组元素非常多,很有可能出现内存溢出。解决这种问题,一种方法是采用每个元素除以数组长度,再对结果求和。
实现代码:
public double doubleArrage(double[] arr) {
double result = 0;
for(int i = 0;i < arr.length; i++) {
result += arr[i] / arr.length;
}
return result;
}
另一种方法是,假定数组长度是动态的,当存在一个元素时,均值ave即为当前数组值arr[0]。当加入第二个个元素,第二个元素减去均值ave,得到的差值除以数组长度,再与均值ave相加,即可得到数组均值。以此类推,直到数组所有元素参与计算,也就完成了整个数组均值计算。
实现代码:
public double doubleArrage(double[] arr) {
double result = arr[0];
for(int i = 1;i < arr.length; i++) {
double temp = arr[i];
result += (temp - result) / (i + 1);
}
return result;
}