找到arrayList中值的问题

时间:2016-12-13 09:44:08

标签: java arrays oop arraylist

我不断获得The type of the expression must be an array type but it resolved to ArrayList<Double> arrayList正在从我的Test类中提取数字。我做了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;
}

4 个答案:

答案 0 :(得分:5)

问题在于找到中间位置:

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;

答案 1 :(得分:1)

您使用arrayList而不是数组,因此必须使用ArrayList的get(int index)方法来访问数据。这是这样使用的:

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

答案 2 :(得分:1)

问题是,如果你有一个包含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);
}

答案 3 :(得分:0)

确保在 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;
}