java:如何找到初始值为零的值并得到错误“/ by zero”
java: how to find a value in which initial value is zero and getting error "/ by zero"
我需要计算 java 游戏的准确度。到目前为止,我尝试了几种方法,但每次它都不起作用或给我一个错误“/为零”。 bullets_shot 的初始值为零,精度公式为 enemies_downed % bullets_shot。如何在获得准确读数的同时绕过此错误?我尝试做一个循环,如果它是 0,它将 bullets_shot 设置为 1,但它不会给出准确的读数。有没有一种方法可以为它设置一个值,直到它的值大于 1,如果可以,我该怎么做?下面是一些代码片段。
这是完整的代码:
https://github.com/ms12r/Galaxy-Monkeys
在敌人的tick方法中class:
if(tempObject.getId() == ID.Bullet)
{
if(getBounds().intersects(tempObject.getBounds()))
{
hp -= 50;
bullets_hit += 1;
handler.removeObject(tempObject);
并在鼠标输入中 class
for (int i = 0; i < handler.object.size(); i++)
{
GameObject tempObject = handler.object.get(i);
if(tempObject.getId() == ID.Player)
{
handler.addObject(new Bullet(tempObject.getX()+16,
tempObject.getY()+24, ID.Bullet, handler, x, y, game));
bullets_shot += 1;
}
游戏中class
System.out.println("GAME OVER");
System.out.println("Level Reached: " + game.level);
System.out.println("Accuracy: " + ((Enemy.bullets_hit + Gorilla.bullets_hit) % MouseInput.bullets_shot) + "%");
Game.INSTANCE.stop(); }
如果您遇到的错误是 / by zero
,请考虑查看您的计算。
System.out.println("Accuracy: " + ((Enemy.bullets_hit + Gorilla.bullets_hit) % MouseInput.bullets_shot) + "%");
很简单,MouseInput.bullets_shot
没有对其进行检查以防止错误发生。
您可以使用简单的 if
语句修复它。
如果(在您的情况下)用户射击了一些子弹,则计算只能在没有被零除错误的情况下发生。没有开枪的情况可以评价为0准确率:
...
double accuracy;
if (MouseInput.bullets_shot > 0) {
// your calculation
accuracy = (Enemy.bullets_hit + Gorilla.bullets_hit) % MouseInput.bullets_shot;
} else {
accuracy = 0D;
}
System.out.println("Accuracy: " + accuracy);
...
还有一个问题:为什么百分比计算使用模数 (%
) 而不是除法 (/
)?
您可以创建一个名为 bulletAcuracy() 的简单方法,如下所示
public static double bulletAcuracy(int bulletHits, int totalBulletsFired)
{
if(totalBulletsFired == 0)
return 0;
return bulletHits/((double)totalBulletsFired);
}
然后像这样在main中调用它
System.out.println("Accuracy: " + bulletAcuracy(Enemy.bullets_hit + Gorilla.bullets_hit, MouseInput.bullets_shot) + "%");
我需要计算 java 游戏的准确度。到目前为止,我尝试了几种方法,但每次它都不起作用或给我一个错误“/为零”。 bullets_shot 的初始值为零,精度公式为 enemies_downed % bullets_shot。如何在获得准确读数的同时绕过此错误?我尝试做一个循环,如果它是 0,它将 bullets_shot 设置为 1,但它不会给出准确的读数。有没有一种方法可以为它设置一个值,直到它的值大于 1,如果可以,我该怎么做?下面是一些代码片段。 这是完整的代码: https://github.com/ms12r/Galaxy-Monkeys
在敌人的tick方法中class:
if(tempObject.getId() == ID.Bullet)
{
if(getBounds().intersects(tempObject.getBounds()))
{
hp -= 50;
bullets_hit += 1;
handler.removeObject(tempObject);
并在鼠标输入中 class
for (int i = 0; i < handler.object.size(); i++)
{
GameObject tempObject = handler.object.get(i);
if(tempObject.getId() == ID.Player)
{
handler.addObject(new Bullet(tempObject.getX()+16,
tempObject.getY()+24, ID.Bullet, handler, x, y, game));
bullets_shot += 1;
}
游戏中class
System.out.println("GAME OVER");
System.out.println("Level Reached: " + game.level);
System.out.println("Accuracy: " + ((Enemy.bullets_hit + Gorilla.bullets_hit) % MouseInput.bullets_shot) + "%");
Game.INSTANCE.stop(); }
如果您遇到的错误是 / by zero
,请考虑查看您的计算。
System.out.println("Accuracy: " + ((Enemy.bullets_hit + Gorilla.bullets_hit) % MouseInput.bullets_shot) + "%");
很简单,MouseInput.bullets_shot
没有对其进行检查以防止错误发生。
您可以使用简单的 if
语句修复它。
如果(在您的情况下)用户射击了一些子弹,则计算只能在没有被零除错误的情况下发生。没有开枪的情况可以评价为0准确率:
...
double accuracy;
if (MouseInput.bullets_shot > 0) {
// your calculation
accuracy = (Enemy.bullets_hit + Gorilla.bullets_hit) % MouseInput.bullets_shot;
} else {
accuracy = 0D;
}
System.out.println("Accuracy: " + accuracy);
...
还有一个问题:为什么百分比计算使用模数 (%
) 而不是除法 (/
)?
您可以创建一个名为 bulletAcuracy() 的简单方法,如下所示
public static double bulletAcuracy(int bulletHits, int totalBulletsFired)
{
if(totalBulletsFired == 0)
return 0;
return bulletHits/((double)totalBulletsFired);
}
然后像这样在main中调用它
System.out.println("Accuracy: " + bulletAcuracy(Enemy.bullets_hit + Gorilla.bullets_hit, MouseInput.bullets_shot) + "%");