检查模式的方法

时间:2014-04-07 00:33:20

标签: java methods mode

我在这里有这个方法,检查数组中的Mode(最常见的元素)。虽然有一点需要考虑,但我不知道如何去做。例如:如果我的数组是{1,2,2,3,3,5} ..我需要打印出'NaN',因为2和3都出现了2次。任何有关如何添加此内容的帮助表示赞赏。

我的代码:

  public double mode() {
    double maxValue=0, maxCount=0;
    boolean flag=false;

    for (int i = 0; i < data.length; ++i) 
        {
            double count = 0;
                for (int j = 0; j < data.length; ++j) 
                    {
                        if (data[j]==(data[i])) ++count;
                    }
                if (count > maxCount)
                {
                        if(count>1)flag = true;
                        maxCount = count;
                        maxValue = data[i];
                }
        }
        if(flag)
        {
            return maxValue;
        }
        else return 0.0;
    } 

2 个答案:

答案 0 :(得分:0)

当您找不到模式时看到返回0.0,当您调用mode()函数时如何使用此三元组:

final double mode = this.mode();
System.out.println(mode == 0.0 ? "NaN" : mode);

如果您愿意,可以将其完整填写:

final double mode = this.mode();
if(mode == 0.0)
{
    System.out.println("NaN");
}
else
{
    System.out.println(mode);
}

答案 1 :(得分:0)

我认为您当前的代码并未完全给出您想要的结果。

以下是更新的代码段:

public double mode() {
        // Sort array
        Arrays.sort(data);

        double maxValue = 0.0, maxCount = 0.0;
        for (int i = 0; i < data.length; ++i) {

            // Count number of elements with same value
            int count = 0;
            int index = i;  
            while (index < data.length) {
                if (data[i] == data[index]) {
                    count++;
                    index++;
                } else {
                    break;
                }
            }

            if (count > maxCount) {
                maxCount = count;
                maxValue = data[i];
            } else if (count == maxCount) {
                maxCount = count;
                maxValue = 0.0;
            }
        }

        return maxValue;
    }

然后,从您致电mode()的地方开始,执行以下操作:

double m = mode();
System.out.println(m == 0.0 ? "NaN" : m);