2015-10-18 72 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