0

我需要在我的 java 游戏中计算准确性。到目前为止,我尝试了几种方法,但是每次它要么不起作用,要么给我一个错误“/ by zero”。bullets_shot 的初始值为零,准确度公式为enemy_downed % bullets_shot。如何在获得准确读数的同时绕过此错误以确保准确性?我尝试做一个循环,如果它是 0 则将 bullets_shot 设置为 1,但它不会给出准确的读数。有没有一种方法可以为它设置一个值,直到它的值大于 1,如果是这样,我该怎么做?以下是一些代码片段。这是完整的代码: https ://github.com/ms12r/Galaxy-Monkeys

在敌人类的tick方法中:

if(tempObject.getId() == ID.Bullet)
        {
            if(getBounds().intersects(tempObject.getBounds()))
                {
                    hp -= 50;
                    bullets_hit += 1;
                    handler.removeObject(tempObject);

在 mouseinput 类中

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;

        }

在游戏课上

            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();           }
4

2 回答 2

2

如果您得到的错误是/ 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);

...

仍然存在一个问题:为什么在百分比计算中使用模数 ( %) 而不是除法 ( )?/

于 2018-03-05T22:22:48.267 回答
1

您可以创建一个名为 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) + "%");
于 2018-03-05T22:28:06.417 回答