计算中位数

时间:2014-05-15 16:23:32

标签: java median

我无法弄清楚出了什么问题,为什么我的中位数没有?一切都有效,除了我的中位数,我已经坐了一会儿看着它,但仍然不明白为什么它不起作用。

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

3 个答案:

答案 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个元素?如果不是你的逻辑将不起作用。

相关问题