簡體   English   中英

我想對數組的前半部分和后半部分進行算術平均

[英]I want to make arithmetic mean for first half and then for the second half of array

我對整個排序數組進行了算術平均值,但現在我想對數組的第一個排序的一半和第二個排序的一半進行算術平均值。

例如:我的數組是:77、99、44、55、22、88、11、00、66、33。我的代碼首先進行排序。

程序的結果是:00 11 22 33 44 55 66 77 88 99。

現在我想取上半場的平均值:00 11 22 33 44 並打印出來。

然后我想計算下半場的平均值:55 66 77 88 99 並打印出來。

public class Array {
private double[] a;
private int NrElmts;
public Array(int max)
    { a = new double[max];
        NrElmts = 0;
    }
public void elements(double value)
    { a[NrElmts] = value;
        NrElmts++;
    }
public void print()
    { for(int j=0; j<NrElmts; j++)
        System.out.print(a[j] + " ");
        System.out.println("");
    }
public void selectionSort()
    {
int out, in, min;
for(out=0; out< NrElmts -1; out++)
{ min = out;
for(in=out+1; in< NrElmts; in++)
if(a[in] < a[min] )
min = in;
invertPositions(out, min); }
}
private void invertPositions(int one, int two)
{ double temp = a[one];
a[one] = a[two];
a[two] = temp;
}
public void mean()
{
  int  i;
  double sum = 0;
  for(i = 0; i < NrElmts; i++) {
     sum+=a[i];}
  double medie = sum/NrElmts;
  System.out.format("Mean is: %.1f", mean);
  System.out.println("");
}
}

要計算 9、2 和 7 的平均值,您必須首先將它們全部加起來,等於 18,然后除以有多少 - 所以 18 / 3 即 6。

雖然,您必須考慮奇數列表的可能性 - 如果元素數量奇數,例如 1, 2, 3 3 的中點 - 是 1.5 - 如果您正在遍歷索引,則迭代變量會將中間點計為 1。所以這有點棘手,不確定你想要做什么。

不過請考慮以下代碼 - 它完全符合您的要求,但是對於奇數列表大小,它只會除以十進制值

        LinkedList<Integer> numbers = new LinkedList<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);
        numbers.add(40);        

        int size = numbers.size();

        int iterativeHalf = size / 2;
        float meanHalf = (float) size / 2;

        float lowerMean = 0;
        float upperMean = 0;
        for (int i = 0; i < size; i++) {
            int realRef = i + 1;
            Integer value = numbers.get(i);

            if (realRef > iterativeHalf) { //Should be calculating upper mean
                if (upperMean == 0) { //if lowerMean is just a running total, not divided yet to get the mean
                    System.out.println("the lower mean for numbers is " + lowerMean + " / " + meanHalf);
                    lowerMean = (lowerMean) / meanHalf; //add last value + divide to set it to the mean
                }

                System.out.println("upper mean = " + upperMean + " + " + value + " = " + (upperMean + value));
                upperMean = upperMean + value; //keep the upper values up total going

            } else {
                System.out.println("lower mean = " + lowerMean + " + " + value + " = " + (lowerMean + value));
                lowerMean = lowerMean + value; //keep adding the lower halfs values up
            }
        }
        //When it breaks, must divide upperMean by size to get mean
        System.out.println("the upper mean for numbers is " + upperMean + " / " + meanHalf);
        upperMean = (upperMean) / meanHalf;
        System.out.println(" ");
        System.out.println("FINAL lower mean = " + lowerMean);
        System.out.println("FINAL upper mean = " + upperMean);



輸出是:

lower mean = 0.0 + 10 = 10.0
lower mean = 10.0 + 20 = 30.0
the lower mean for numbers is 30.0 / 2.0
upper mean = 0.0 + 30 = 30.0
upper mean = 30.0 + 40 = 70.0
the upper mean for numbers is 70.0 / 2.0

FINAL upper mean = 35.0
FINAL lower mean = 15.0


這對於 [10, 20, 30, 40] 將產生上面顯示的輸出,但基本上 (10+20)/2 作為下均值和 (30+40)/2 作為上均值。

對於 [10, 20, 30, 40, 50] 將產生 (10 + 20) / 2.5 下均值和 (30+40+50)/2.5 為上均值

只取數組的一半之和。 如果您的數組大小為奇數,請為您的后半部分或前半部分再添加一個元素。

    public void firstHalfMean(){
        int i;
        double sum = 0;
        int numberOFElements = NrElmts/2;
        for (i = 0; i < NrElmts/2; i++) {   // take sum only till half.
            sum += a[i];
        }
        double mean = sum / numberOFElements;   // sum/half the elements
        System.out.format("Mean is: %.1f", mean);
        System.out.println("");
    }

    public void secondHalfMean(){
        int i;
        double sum = 0;
        int numberOFElements = NrElmts % 2 == 0 ? NrElmts/2 : NrElmts/2 + 1; // If odd, this second array will contain one more element.
        for (i = NrElmts/2; i < NrElmts; i++) {   // take sum for the next half
            sum += a[i];
        }
        double mean = sum / numberOFElements;  // sum/half elements  (half + 1) in case of odd length.
        System.out.format("Mean is: %.1f", mean);
        System.out.println("");
    }

嘗試這個

public void firstHalfMean(){
        int i;
        double sum = 0;
        int numberOFElements = NrElmts/2;
        for (i = 0; i < NrElmts/2; i++) {   // take sum only till half.
            sum += a[i];
        }
        double mean = sum / numberOFElements;   // sum/half the elements
        System.out.format("Mean is: %.1f", mean);
        System.out.println("");
    }

    public void secondHalfMean(){
        int i;
        double sum = 0;
        int numberOFElements = NrElmts % 2 == 0 ? NrElmts/2 : NrElmts/2 + 1; // If odd, this second array will contain one more element.
        for (i = NrElmts/2; i < NrElmts; i++) {   // take sum for the next half
            sum += a[i];
        }
        double mean = sum / numberOFElements;  // sum/half elements  (half + 1) in case of odd length.
        System.out.format("Mean is: %.1f", mean);
        System.out.println("");
    }

由於您已經有辦法對整個數組求平均值,因此您需要做的就是找到數組的中間位置,然后從該點運行到該點。 在您的示例中:NrElmts 是 10,因此將您的 NrElmnts 除以 2,這樣您就可以得到 1 到 5 的平均值,然后是 6 到 10,每個都是 5。

想想數組中有奇數個元素的情況,你想怎么做,無論是在第一個數組中還是在第二個數組中。 如果這也需要幫助,請告訴我。

步驟: 1)創建一個新變量,例如 a1 到 NrElmts/2,並使用平均函數從 1 到 a1 2)從 a1+1 到 NrElmnts

如果您需要任何幫助,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM