如何在java中计算排序数组的模式

时间:2016-11-18 23:14:15

标签: java arrays sorting mode

所以我正在编写一种方法来计算排序数组的模式。但是当我打印出模式值时,它总是出现0.00,我试图解决它但不能。 这是我的方法代码: (numRead是传递的数组,num是实际具有值的数组长度)

public static void modeCalc(double[] numRead, int num)
    {
        double maxValue = numRead[0];
        int maxCount = 0;
        for (int i = 0; i < numRead.length; i++)
        {
            int count = 0;
            for (int j = 0; j < numRead.length; j++)
            {
                if (numRead[j] == numRead[i])
                    count++;
            }
            if (count > maxCount)
            {
                maxCount = count;
                maxValue = numRead[i];
            }
        }
        return maxValue;
    }

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

粗略地看一下,你的数组在排序数据的末尾有更多的0值,这些就成了模式。这里似乎是问题,声明numRead是排序数组,但它只有num值的重要性。循环搜索数组到最后,而不是搜索具有良好值的元素数。将numRead.length更改为num,看看是否有帮助。另外,尝试传递一个完整的数组(没有空元素),看看它是否更好。很可能空元素被初始化为零,并且这些元素的数量多于任何其他值。

答案 1 :(得分:2)

这应该有效。你需要返回一个double,你需要使用num。

class ModeArray
{
    public static void main(String[] args) {
        double[] numRead = { 1, 2, 3, 3, 4, 4, 4, 5, 0, 0, 0, 0, 0 };
        System.out.println(modeCalc(numRead, 8));
    }

    public static double modeCalc(double[] numRead, int num) {
        double maxValue = numRead[0];
        int maxCount = 0;
        for (int i = 0; i < num; i++) {
            int count = 0;
            for (int j = 0; j < num; j++) {
                if (numRead[j] == numRead[i]){
                    count++;
                }
            }
            if (count > maxCount) {
                maxCount = count;
                maxValue = numRead[i];
            }
        }
        return maxValue;
    }
}

如果您知道数组已排序,则应使用此信息。

public static double modeCalc(double[] numRead, int num) {
    double maxValue = numRead[0];
    double lastValue = maxValue;
    int count = 1;
    int maxCount = 1;
    for (int i = 1; i < num; i++) {
        if (numRead[i] == lastValue) {
            count++;
        } else {
            count = 1;
            lastValue = numRead[i];
        }
        if (count > maxCount) {
            maxCount = count;
            maxValue = lastValue;
        }
    }
    return maxValue;
}

PS:请不要使用没有大括号的if语句。这样可以更容易地添加错误,并且更难找到错误。