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以获得更多读数