我无法弄清楚出了什么问题,为什么我的中位数没有?一切都有效,除了我的中位数,我已经坐了一会儿看着它,但仍然不明白为什么它不起作用。
import java.util.Arrays;
public class Stat{
private int[] värden = new int[100];
public int count = 0; // counter = 0
public int Värden(int värde){
värden[count++]=värde;
return värde;
}
public double medelv(){ //medelvärde
double medelv = 0;
int total = 0;
for(int x = 0; x < count; x++){
total += värden[x];
medelv = (total/count);
}
return medelv;
}
public double medianen(){
Arrays.sort(värden);
double medianen = 0;
for(int x = 0; x < count; x++){
if (värden.length % 2 == 0)
medianen = ((double)värden[värden.length/2] + (double)värden[värden.length/2 - 1])/2;
else
medianen = (double) värden[värden.length/2];
答案 0 :(得分:1)
正如@zouzou在评论中所说,int除以另一个int等于int。投下其中一个,它会起作用。
medelv = ((double)total/count);
答案 1 :(得分:0)
更简洁的计算中位数的方法:
ArrayList<Integer> integers = new ArrayList<Integer>();
//TO DO: Add the integers to the array list
Collections.sort(integers);
double median;
if (integers.size() > 0) {
int x = integers.size() / 2;
else if (integers.size() % 2 == 0)
median = (integers.get(x - 1) + integers.get(x)) / 2.0;
else median = integers.get(x);
}
答案 2 :(得分:0)
我没有看到你的逻辑有任何问题。除了在循环中找到它。这不是必需的。
if (värden.length % 2 == 0) {
medianen = ((double)värden[värden.length/2] + (double)värden[värden.length/2 - 1])/2;
} else {
medianen = värden[värden.length/2];
}
如果你的数组长度是偶数,那么上半部分是双倍的,所以没有问题。如果它不是那么你正在挑选中间(5/2 => 2.5,这将变为3。它是中位数)
我的问题是,你将数组长度声明为100.你是否填充了所有100个元素?如果不是你的逻辑将不起作用。