簡體   English   中英

中位數答案錯誤

[英]Wrong Median Answer

問題:我在計算arrayList的中位數時遇到問題

背景:所以我的ArrayList獲取隨機生成的值,我必須計算它的中位數; 我相信我的中位數公式很好,但是我得到了ArrayList中3個值的中位數答案錯誤。

對於三個值,它給出了錯誤的中位數。 EG:當數組列表的值是:193.5、200.5、239.8時,程序只是獲取前兩個值的平均值並給出答案,而不是求200.5

public double getMedianB(){
    Collections.sort(myDataB);
    double middle = myDataB.size()/2;
    if (myDataB.size()%2 == 1) {
       middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 - 1))/2;
    } else {
        middle = myDataB.get(myDataB.size() / 2);
    }
    System.out.println("median:" + middle);
  return middle;
}

您應該翻轉條件:

以下條件檢查項數是否為奇數。 在這種情況下,您只需要一個中間值。

if (myDataB.size()%2 == 1) {

中位數由

  1. 以升序排列清單
  2. 如果列表中的項目數為奇數,則中間數為中位數
  3. 如果項目數為偶數,則將中間兩個數字相加並除以二,結果將為中位數

在您的代碼中,您具有偶數和奇數切換的條件,因此正確的條件如下

if (myDataB.size()%2 == 0) {
   middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 + 1))/2;
} else {
    middle = myDataB.get(myDataB.size() / 2);
}

為了獲得中間值,您只需要獲取中間值。 而是在您的示例中,您正在計算前兩個值的平均值。

將代碼更改為:

Collections.sort(myDataB);
        double middle = myDataB.size()/2;
        if (myDataB.size()%2 == 1) {
           middle = (double)myDataB.get(myDataB.size()/2);
        } else {
            middle = (double) myDataB.get(myDataB.size() / 2);
        }
        System.out.println("median:" + middle);

更改其他條件,無論您要在此處執行什么操作。

暫無
暫無

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

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