0

我正在尝试制作一个程序来计算游戏中所需的分数,并且该等式在我的计算器上运行良好,但当我尝试将其更改为与 java 一起使用时却不行。等式是5,000 / 3 * (4n^3 - 3n^2 - n) + 1.25 * 1.8^(n - 60)例如第 49 级你应该需要有 772240000 分的总分,计算器给出了这个答案,但是我的java程序没有。这是我尝试过的代码。

for (int i = 0; i <= 100; i++) {
        double score = (double) ((5000 / 3) * (Math.pow(4 * i, 3) - Math.pow(3 * i, 2) - i) + (1.25 * Math.pow(1.8, i - 60)));
        System.out.println("Level " + i + " requires " + (long) score);
    }

这似乎无法正常工作,并给出 12513130000 作为 lvl 49 所需的积分。如果有人可以让它工作,你会解释我做错了什么吗?

4

2 回答 2

4

您的问题在 Math.pow 内部 - 您每次都将索引值乘以一个标量。

4 * Math.pow(i, 3)

3 * Math.pow(i, 2)

应该修复它。

编辑:以及其他答案中提到的整数除法。

于 2013-08-14T22:09:07.900 回答
4

你打乱了你的Math.pow电话,但你可以完全避免其中一些:

double score = (double) ((5000 / 3) * (4 * i * i * i - 3 * i * i - i) + (1.25 * Math.pow(1.8, i - 60)));

这就是问题所在:Math.pow(4 * i, 3)is 实际上(4i)^3不是 4(i^3). 要执行后者,您需要以下内容:

4 * Math.pow(i, 3)

我不完全确定整数除法部分(您其转换为double),但您可能必须更改5000 / 35000.0 / 3.

于 2013-08-14T22:10:09.610 回答