确定数组中特定元素的总和

时间:2015-05-12 01:14:09

标签: java arrays eclipse loops for-loop

我有一个数组,它存储用户输入的一系列双打。数组的长度是用户的选择,因此会有所不同。我将数字放入一个循环中,它计算平均值并将异常值交换到数组的最后一个索引。在没有异常值的情况下计算新的平均值,并将新的异常值交换到数组的倒数第二个索引。重复该循环直到剩下1个元素。

然而,异常值并没有从数组中删除,所以我需要以某种方式计算平均值而不用异常值。我以为我可以指定要包含在平均值中的元素的索引。

2 个答案:

答案 0 :(得分:1)

似乎这个过程应该是这样的:

  1. 通过遍历数组到n个元素来计算平均值。
  2. 找到异常值。
  3. 与最后一个元素交换。
  4. 现在将n设置为(数组的当前大小 - 1)。并继续这样做直到size = 0;
  5. 我编写了一个可能适合您的代码。请注意,您可能需要根据自己的要求进行一些小的更改。

      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'); } }); 需要更改。你没有说明什么和异常值,所以我输入了一些填充码。此外,代码可能需要稍微更改一下。