2015-10-18 89 views
1

那么,我正在使用Java编程一个算术计算器,并且我试图实现一个计算模式的函数。问题是,由于某种原因,它不能正常工作。这里的功能:统计模式(计算器Java)

public static String moda(Double[] valores){ 

    Double resultado = null; 
    Integer contador = 0; 
    Integer contadorFinal = 0; 

    for(int i = 0; i < valores.length; i++){ 

     contador = 0; 
     for(int j = 0; j < valores.length; j++){ 

      if(valores[i] == valores[j]) contador++; 
     } 

     if(contador > contadorFinal){ 
      resultado = valores[i]; 
      contadorFinal = contador; 
     } 
    } 

    return "La moda es " + resultado + " que se repite un total de " + contadorFinal + " veces."; 
} 

出于某种原因,它总是返回我的数组的第一个值(例如,如果双[] VALORES包含(4,7,7,8,8,8),它会回报我4);并且模式总是1。

我一直在寻找一遍又一遍的代码,对我来说它看起来很好。你能帮我吗?

+0

那么,你只有一个“计数”变量。在你的例子中(4,7,7,8,8,8)如何知道7次发生了两次,8次发生了三次?您需要在数组中为每个值计数一个变量。 – markspace

+0

@markspace谢谢你的回答! “contadorFinal”是第二个计数器。 – xFunkyTImes

+0

对,对不起。但起初我无法弄清楚你在做什么。你的算法在大型数据集上不会很好的预处理,你可以看看如何在一个循环中完成这个操作(这是我的评论假定的)。 – markspace

回答

4

这是因为你在比较Double,通过平等。使用double或使用Double.compare()

for(int i = 0; i < valores.length; i++){ 

    contador = 0; 
    for(int j = 0; j < valores.length; j++){ 

     if(Double.compare(valores[i], valores[j]) == 0) 
      contador++; 
    } 

    if(contador > contadorFinal){ 
     resultado = valores[i]; 
     contadorFinal = contador; 
    } 
} 
+0

Thanks @markspace!你是我的救世主,我已经像几个小时看这个代码:) – xFunkyTImes

+0

梦幻般的答案,以及优秀的问题。过去15分钟我一直对此感到困惑! – Siddhartha

+1

有趣的是,原来的代码已经使用''''Integer''来代替''Double''',因为java缓存了'''-128和127''的整数。 – Siddhartha