有5个静态变量:countAllGames
,countWinCrosses
,countWinNoughts
,percentageWinCrosses
和percentageWinNoughts
。他们的结果显示在“统计”窗口中。有一个问题:前三个变量通常是它们的计数器按预期递增,但最后两个变量将其结果降为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();
}
还有一种方法可以增加所有比赛的数量。为什么变量percentageCrosses
和percentageNoughts
在第二次调用calculatePercentage()
后变为零?在第一次获胜后,其中一个变为等于100%,但在第二个游戏(比如赢得另一个)之后,两个变量都等于0.0。前3个变量保留其值,每次增加1。
答案 0 :(得分:1)
静态变量没有任何问题。它的问题是你的变量是整数。如果用整数除以整数,则会得到一个整数。
因此,如果你除3/5,你将得到0(整数),而不是0.6。如果你将它乘以100,你也会得到0。
最简单的解决方案是首先乘以100并在此之后除以!所以:
myPercentValue = quantity1 * 100 / quantity2;
所以你会得到你想要的东西。在我的例子中,首先你将3与100相乘,所以你得到300,在你用5除以后,你将得到60你想要的。
或者,您可以使用浮点或双精度类型,方法是将变量声明为浮点数,或者动态转换它们。这就是@Gustek的评论所暗示的,也是一个很好的解决方案。但是这些复杂的转换通常几乎不需要。操作顺序的简单更改也可以满足您的需求。