2014-10-09 46 views
0

有5個靜態變量countAllGames,countWinCrosses,countWinNoughts,percentageWinCrosses和percentageWinNoughts。他們的結果顯示在統計窗口中。有一個問題:前3個變量通常是按照計劃遞增的,但最後兩個變量會將結果放到0.0。下面是代碼:在第二個賦值後復位靜態變量

if (countWinCrosses != 0) { 
    percentageWinCrosses = (countWinCrosses/countAllGames) * 100; 
} 
if (countWinNoughts != 0) { 
    percentageWinNoughts = (countWinNoughts/countAllGames) * 100; 
} 

這是方法的代碼,其中一個制勝的X的或o的後執行:

public static void incrementWinCrosses() { 
    countWinCrosses++; 
    calculatePercentage(); 
} 

public static void incrementWinNoughts() { 
    countWinNoughts++; 
    calculatePercentage(); 
} 

也有增加所有的計數方法玩過的遊戲。爲什麼在第二次調用calculatePercentage()之後變量percentageCrosses和percentageNoughts變爲零?在第一次獲勝後,其中一個等於100%,但在第二場比賽(贏得另一個)之後,兩個變量都等於0.0。前3個變量保留其值,每次增加1.

+0

檢查此問題http://stackoverflow.com/questions/7220681/division-of-integers-in-java – Gustek 2014-10-09 09:19:48

+1

使用像這樣的靜態是邪惡的。爲什麼不在一個實例上有成員變量? – 2014-10-09 09:21:02

+0

@Lance Java,所以它們在每次運行統計窗口後重置爲零? – akhbulatov 2014-10-09 09:25:59

回答

1

它對靜態變量沒有任何問題。它有問題,你的變量是整數。如果你用整數除整數,你會得到一個整數。因此,如果你除以3/5,你將得到0(作爲整數),而不是0.6。如果你乘以100,你也會得到0。

最簡單的解決方法是先將乘以100,然後除以!所以:

myPercentValue = quantity1 * 100/quantity2; 

所以你會得到你想要的。在我的例子中,首先你用100乘以3,所以你得到了300,並且在你用5除以後,你會得到60。或者,您可以使用浮點型或雙精度型,可以通過將變量聲明爲浮點,或者將它們即時轉換。這就是@Gustek的評論所暗示的,也是一個很好的解決方案。但是這些複雜的轉換通常實際上並不需要。操作順序中的簡單更改也將按照您的要求進行。

+0

我認爲使用浮點數比乘以百分數要好。 因爲,2 * 100/3 = 66.67,如果你使用整數,那麼你得到66,但在這種情況下,67是正確的值 – Arnab 2014-10-09 09:34:04

+0

@Arnab我認爲,這取決於我們的舍入算法。例如,也有可能我們希望只在完美匹配時才能獲得100%。 – peterh 2014-10-09 09:36:45

+0

@Arnab計算百分比的結果,我分配了一個double類型的變量。 – akhbulatov 2014-10-09 09:47:43

相關問題