Java 求数组列表中值的问题

Java 求数组列表中值的问题,java,arrays,oop,arraylist,Java,Arrays,Oop,Arraylist,我不断得到表达式的类型必须是数组类型,但它解析为ArrayListArrayList正在从我的测试类中提取数字。我使用if来确定arrayList中的值是偶数还是奇数,因为我可以使用两种不同的方法来确定中值。但我无法让中位数公式起作用 public class Data { private ArrayList<Double> sets; public Data(double[] set) { this.sets = new ArrayList<Double>(

我不断得到
表达式的类型必须是数组类型,但它解析为ArrayList
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;
}
公共类数据{
私有数组列表集;
公共数据(双[]套){
this.sets=new ArrayList();
用于(双i:套){
本.集.加(i);
}
}
公共双中心{
集合。排序(集合);
双中间=sets.size()/2;
if(sets.size()%2==1){
中间=(sets[sets.size()/2]+sets[sets.size()/2-1])/2;
}否则{
middle=sets[sets.size()/2];
}
返回中间;
}

问题出在中间:

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;
}

sets
是一个
ArrayList
而不是一个数组,您不能使用像
sets[index]
这样的索引表示法,这是用于常规数组的。请使用
sets.get(index)
相反。简而言之,ArrayList不是数组。它是一个使用数组的对象,因此您需要使用方法来设置/获取其中的值。因为此行是下划线(使用IDE)或nice,使用
javac
显示给OP。您应该解释为什么需要使用
.get(index)
在一个
数组列表中。
对他的问题没有真正的解释。你能试着重新表达你的句子吗,这并不意味着什么;)请解释一下为什么它不能像数组一样使用。当然,tnx用于重新定义,因为如果你有一个包含4个元素的数组[0..3],要找到中位数,你只需做4/2-1=1,索引1是数组的中位数。现在如果数组是5,你只需做5/2=2,2是中位数。我可以将中间值改为-1以获得更多读数