我有一个数组,它存储用户输入的一系列双打。数组的长度是用户的选择,因此会有所不同。我将数字放入一个循环中,它计算平均值并将异常值交换到数组的最后一个索引。在没有异常值的情况下计算新的平均值,并将新的异常值交换到数组的倒数第二个索引。重复该循环直到剩下1个元素。
然而,异常值并没有从数组中删除,所以我需要以某种方式计算平均值而不用异常值。我以为我可以指定要包含在平均值中的元素的索引。
答案 0 :(得分:1)
似乎这个过程应该是这样的:
我编写了一个可能适合您的代码。请注意,您可能需要根据自己的要求进行一些小的更改。
public static void main(String[] args) throws FileNotFoundException {
double[] dataArray = new double[] {1.5,2.5,3.5,4.5,7.5,8.5,2.5};
int arraySizeToConsider = dataArray.length;
double outlier;
int index_outlier;
double avg;
double diffInOutlierAndAvg;
while(arraySizeToConsider > 0) {
outlier = dataArray[0];
index_outlier = 0;
avg = computeSum(dataArray,arraySizeToConsider) / (arraySizeToConsider);//avg of elements
diffInOutlierAndAvg = Math.abs(avg - outlier);
// find outlier
for(int index = 0; index<arraySizeToConsider; index++)//increments index
{
if(Math.abs(avg - dataArray[index]) > diffInOutlierAndAvg) {
outlier = dataArray[index];
index_outlier = index;
}
}
double temp = dataArray[arraySizeToConsider -1];
dataArray[arraySizeToConsider -1] = outlier;
dataArray[index_outlier] = temp;
arraySizeToConsider = arraySizeToConsider -1;
System.out.println("Average: " + avg + " Outlier: " + outlier + " index " + index_outlier + " array size to consider: " +arraySizeToConsider);
}
}
private static double computeSum(double[] array, int arraySizeToConsider) {
double sum = 0;
for (int i = 0; i < arraySizeToConsider; i++) {
sum = sum + array[i];
}
return sum;
}
这是输出:
Average: 4.357142857142857 Outlier: 8.5 index 5 array size to consider: 6
Average: 3.6666666666666665 Outlier: 7.5 index 4 array size to consider: 5
Average: 2.9 Outlier: 4.5 index 3 array size to consider: 4
Average: 2.5 Outlier: 1.5 index 0 array size to consider: 3
Average: 2.8333333333333335 Outlier: 3.5 index 2 array size to consider: 2
Average: 2.5 Outlier: 2.5 index 0 array size to consider: 1
Average: 2.5 Outlier: 2.5 index 0 array size to consider: 0
可以做出一些改进,我已经跳过它们。你需要弄明白:)
答案 1 :(得分:1)
我要做的是int size = Array.size();
int outlierLocation;
int sum;
int average;
double temp;
for(int i=0; i<size-1; i++){
outlierLocation = 0;
sum = 0;
average = 0;
for(int j=0; j<size-i; i++){
if (Array[j] is outlier){
outlierLocation = j;
}
sum += Array[j];
}
average = sum/(size-i);
temp = Array(size-i);
Array[size-i] = Array[outlierLocation];
Array[outlierLocation] = temp;
}
来获取数组的大小。然后我会使用for循环并循环遍历数组大小 - 1次。对于每个循环,只查看数组元素0到大小 - loopCount。代码看起来像这样。
is outlier
注意:$.ajax({
url: 'http://api.addressify.com.au/address/autoComplete?api_key=99acd24a-1c94-49ad-b5ef-6f90d0f126b1&term=1+George+st+t&state=nsw&max_results=5',
type: 'GET',
crossDomain: true, // enable this
success: function () { alert('PUT completed'); }
});
需要更改。你没有说明什么和异常值,所以我输入了一些填充码。此外,代码可能需要稍微更改一下。