簡體   English   中英

查找arrayList中位數的問題

[英]Problems finding median of arrayList

我不斷得到The type of the expression must be an array type but it resolved to ArrayList<Double> arrayList 正在從我的測試類中提取數字。 我使用 if 來確定 arrayList 中的值是偶數還是奇數,因為我可以使用兩種不同的方法來確定中位數。 但是我無法使中位數公式起作用。

public class Data {

private ArrayList<Double> sets;

public Data(double[] set) {
    this.sets = new ArrayList<Double>();
    for (double i : set) {
        this.sets.add(i);
    }
}

public double getMedian(){
    Collections.sort(sets);

    double middle = sets.size()/2;
        if (sets.size()%2 == 1) {
           middle = (sets[sets.size()/2] + sets[sets.size()/2 - 1])/2;
        } else {
            middle = sets[sets.size() / 2];
        }
      return middle;
}

問題出在你找到中間的那一行:

middle = (sets[sets.size()/2] + sets[sets.size()/2 - 1])/2;

您只能對數組使用 [index] 表示法。 您需要使用 getter/setter 方法來訪問 ArrayList 的元素。 這應該有效:

middle = (sets.get(sets.size()/2) + sets.get(sets.size()/2 - 1))/2;

您使用的arrayList不是數組,因此必須使用 ArrayList 的get(int index)方法來訪問數據。 這是這樣使用的:

middle = (sets.get(sets.size()/2) +sets.get((sets.size()/2)-1) )/2;

問題是,如果您有一個包含 4 個元素 [0..3] 的數組,要找到中位數,您只需執行 4/2 - 1 = 1 並且索引 1 是數組的中位數。 現在如果數組是 5,你只需做 5/2 = 2 並且 2 是中位數。

public double getMedian() {
    Collections.sort(sets);
    int middle = sets.size() / 2;
    middle = middle > 0 && middle % 2 == 0 ? middle - 1 : middle;
    return sets.get(middle);
}

確保在 if 語句中檢查它是否等於 0。

public double getMedian(){
    Collections.sort(sets);

    double middle = sets.size()/2;
        if (sets.size()%2 == 0) {
           middle = (sets.get(sets.size()/2) + sets.get(sets.size()/2 - 1))/2;
        } else {
            middle = sets[sets.size() / 2];
        }
      return middle;
}

暫無
暫無

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

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