创建随机值的最佳方法是什么?

时间:2010-03-20 20:11:40

标签: java random

我正在试图为我的游戏创建随机值以在屏幕上显示敌人。有时候它会显示2次显示2次...我想问哪个是创建随机值的最佳公式..这是我到目前为止的随机值

 random = 1 * (int) (Math.random() * 100);

5 个答案:

答案 0 :(得分:5)

“有时候有时会显示2次”3“

给出完全随机的数字......在从0到99的每100个随机值中,你会发现平均1.0的双倍数。每10,000个值平均会出现三次。给定1000万随机数,java.util.Random在我的机器上得到以下结果:

Doubles: 99873
Triples: 985

Double Rate: 1 in 100
Triple Rate: 1 in 10152

源代码:

import static java.lang.System.*;

import java.util.Random;

public class Sandbox {
    public static final int NUM_ITERATIONS = 10000000;
    public static void main(String[] args) {
        Random rand = new Random();

        int cur;
        int last = -1;
        int secondLast = -2;
        int nDoubles = 0;
        int nTriples = 0;

        for (int i = 0; i < NUM_ITERATIONS; i++) {
            cur = rand.nextInt(100);
            if (cur == last) {
                nDoubles++;
                if (cur == secondLast) nTriples++;
            }
            secondLast = last;
            last = cur;
        }

        out.println("Doubles: " + nDoubles);
        out.println("Triples: " + nTriples);
        out.println();
        out.println("Double Rate: 1 in " + Math.round(1.0 * NUM_ITERATIONS / nDoubles));
        out.println("Triple Rate: 1 in " + Math.round(1.0 * NUM_ITERATIONS / nTriples));

        exit(0);
    }
}

答案 1 :(得分:3)

实际上,创建真正随机的随机数本身就是一个复杂的游戏。关于此主题的Wikipedia文章将让您深入了解其中的复杂性。如上所述的简单近似可能足以用于游戏目的,但应该注意的是,它会不时地倾向于“条纹”。

答案 2 :(得分:2)

您可以使用java.util.Random

Random random = new Random(); // uses System.nanoTime() as seed
int enemies = random.nextInt(100);

无论如何,你的方法也很好,因为它实际上与上面相同(在幕后)。

您可以打印自己生成的100个随机数序列,并亲眼看看没有问题。

答案 3 :(得分:2)

如果完美的话,你会用什么。

如果您想要更简单的东西,您可能希望使用Random类,如下所示:

Random generator = new Random(seed);
int number = generator.nextInt(100);

答案 4 :(得分:0)

...有时是77,有时候是23等,正如uniform distribution所期望的那样?

如果您希望normal distribution代替您的“敌人”,那么极端情况就不太可能了,seems to be there in Java