2012-10-24 53 views
1

我似乎無法弄清楚爲什麼它不正確打印:Java:計算給出錯誤的答案,我的錯誤在哪裏?

public class test3 { 
    public static void main(String[] args) { 
    double[] gens = {100, 200.1, 9.3, 10}; 
    double d0 = 0; 
    double d1 = 0; 
    double d2 = 0; 
    double d3 = 0; 
    double d4 = 0; 
    double d5 = 0; 
    double d6 = 0; 
    double d7 = 0; 
    double d8 = 0; 
    double d9 = 0; 
    for (int i = 0; i < gens.length; i++) { 
     double percs = gens[i]; 
     while (percs < -9 || 9 < percs) percs /= 10; 
     percs = Math.abs(percs); 
     if (percs == 0) { 
     d0 += 1; 
     } 
     else if (percs == 1) { 
     d1 += 1; 
     } 
     else if (percs == 2) { 
     d2 += 1; 
     } 
     else if (percs == 3) { 
     d3 += 1; 
     } 
     else if (percs == 4) { 
     d4 += 1; 
     } 
     else if (percs == 5) { 
     d5 += 1; 
     } 
     else if (percs == 6) { 
     d6 += 1; 
     } 
     else if (percs == 7) { 
     d7 += 1; 
     } 
     else if (percs == 8) { 
     d8 += 1; 
     } 
     else if (percs == 9) { 
     d9 += 1; 
     } 
    } 
    double[] pack = { 
     d0 /= gens.length, 
     d1 /= gens.length, 
     d2 /= gens.length, 
     d3 /= gens.length, 
     d4 /= gens.length, 
     d5 /= gens.length, 
     d6 /= gens.length, 
     d7 /= gens.length, 
     d8 /= gens.length, 
     d9 /= gens.length 
    }; 
    System.out.println(pack[0]); 
    System.out.println(pack[1]); 
    System.out.println(pack[2]); 
    System.out.println(pack[3]); 
    System.out.println(pack[4]); 
    System.out.println(pack[5]); 
    System.out.println(pack[6]); 
    System.out.println(pack[7]); 
    System.out.println(pack[8]); 
    System.out.println(pack[9]); 
    } 
} 

我知道這是很重複,但是這只是我正在處理它現在。

無論如何,本質上,它應該將這四個數字放在gens數組中,將它們分別切到每個數字的第一個數字(即分別爲1,2和9),然後計算每個數字從0 -9顯示出來,所以'1'應該給0.5(50%),2應該給0.25(25%),9應該給0.25(25%),其中0-9的每個其他數字應該給0。數字'1'爲0.5,而其他數字爲0,我一直無法找到我的錯誤。我得到的結果取決於我輸入的數字(硬編碼),但它們幾乎總是錯誤的。

任何想法?

謝謝!

回答

5

變化

double percs = gens[i]; 

int percs = (int)gens[i]; 

如果你把它作爲一個雙,你的while循環

while (percs < -9 || 9 < percs) percs /= 10; 

將不能正常切斷所有數字第一個除外,因爲它會執行正常分裂不是整數分裂。如果在while循環之後打印percs,則可以看到此內容。


我也想指出,這可以更容易地完成。例如:

double[] gens = {100, 200.1, 9.3, 10}; 

int[] count = new int[10]; 

for (double d : gens) 
    count[("" + Math.abs(d)).charAt(0) - '0']++; 

for (int n : count) 
    System.out.println((double)n/gens.length); 

會做同樣的事情。

+1

打我吧:) – Ina

+0

哦,我總是忘了的時候,什麼時候不投,謝謝ARS和@Ina 另外,我敢肯定的方法,你認爲偉大的作品太多,但我還沒學會還有相當數量的東西,所以我應該堅持我現在知道的。 – Nate

+0

@Nate當然,只是想指出,還有其他的選擇:-)無論如何,很高興我可以幫助 - 不要忘記接受一個答案! – arshajii

1

如果你在每個階段打印出percs你會發現它們是:

1.0 
2.001 
0.93 
1.0 

所以你的==將無法正常工作。這是因爲你正在分裂雙打而不是整數。你可以使用:

int percs = (int) gens[i]; 

這會給你你想要的整數值。