2016-11-18 61 views
1

所以我正在写一个方法来计算排序数组的模式。但是,当我打印出模式值时,它总是以0.00出现,我试图修复它,但不能。 这里是我这个方法的代码: (numRead是传递的数组,NUM是,居然有值的数组的长度)如何计算在java中排序数组的模式

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

任何帮助,非常感谢!

+0

'num'参数的用途是什么?此外,这段代码不能编译,因为你不能从'void'方法返回一个值。 – Andreas

+0

是的,我已经改变了一倍。谢谢。 –

回答

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语句。它使得更容易添加错误,并且更难找到它们。

+1

为什么你需要嵌套循环才能找到排序列表的模式? – Andreas

+0

谢谢。我更新了代码,没有嵌套循环。 –

+0

更好,但有点长。 [This](http://ideone.com/2vyCLx)较短,如果给出空数组,则返回'NaN',而不是抛出'ArrayIndexOutOfBoundsException'。仍然得到了我的最高票数。 – Andreas

2

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

+0

是的,这是问题!谢谢。 –