在第二个赋值后重置静态变量

时间:2014-10-09 09:15:00

标签: java

有5个静态变量:countAllGamescountWinCrossescountWinNoughtspercentageWinCrossespercentageWinNoughts。他们的结果显示在“统计”窗口中。有一个问题:前三个变量通常是它们的计数器按预期递增,但最后两个变量将其结果降为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();
}

还有一种方法可以增加所有比赛的数量。为什么变量percentageCrossespercentageNoughts在第二次调用calculatePercentage()后变为零?在第一次获胜后,其中一个变为等于100%,但在第二个游戏(比如赢得另一个)之后,两个变量都等于0.0。前3个变量保留其值,每次增加1。

1 个答案:

答案 0 :(得分:1)

静态变量没有任何问题。它的问题是你的变量是整数。如果用整数除以整数,则会得到一个整数。

因此,如果你除3/5,你将得到0(整数),而不是0.6。如果你将它乘以100,你也会得到0。

最简单的解决方案是首先乘以100并在此之后除以!所以:

myPercentValue = quantity1 * 100 / quantity2;

所以你会得到你想要的东西。在我的例子中,首先你将3与100相乘,所以你得到300,在你用5除以后,你将得到60你想要的。

或者,您可以使用浮点或双精度类型,方法是将变量声明为浮点数,或者动态转换它们。这就是@Gustek的评论所暗示的,也是一个很好的解决方案。但是这些复杂的转换通常几乎不需要。操作顺序的简单更改也可以满足您的需求。