[英]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.