我需要在java中生成相当随机的数字,但是每次我的方法调用时都不需要重复的结果。请考虑以下代码:
Random rand = new Random(seed);
if (rand.nextBoolean())
// do something...
那么什么是最好的种子?
答案 0 :(得分:4)
Random
空构造函数不使用当前刻度作为默认种子吗?至少那是C#的作用。如果是这样,空构造函数就像任何一样好。 Java的文档只说"这个构造函数将随机数生成器的种子设置为一个非常可能与此构造函数的任何其他调用不同的值。"
修改:以下是我发现的内容:
public Random() { this(++seedUniquifier + System.nanoTime()); }
private static volatile long seedUniquifier = 8682522807148012L;
但你不能保证随机性。它是伪随机的,有人可以根据以前的值找出未来的值。如果安全性不是主要问题,您可以使用new Random()
。除非你不正确地使用它,比如在循环中初始化它,它应该做得很好。
答案 1 :(得分:2)
您可以随时尝试System.currentTimeMillis()
,
答案 2 :(得分:2)
尝试这样的事情
Random rand = new Random(System.currentTimeMillis());
if (rand.nextBoolean())
// do something...