我的问题涉及Java;使用以下代码:
for (int s = 0; s < 600; s++) {
Random r = new Random(s);
System.out.println(r.nextDouble());
System.out.println(r.nextDouble() + "\n-----");
}这将产生600个随机数。我知道这有点奇怪,但在我的实际项目中,每次都需要一个新的随机数生成器。我收到的种子是连续的。产生的第一个随机双对于任何种子来说都是非常接近的,这是因为用于初始化的线性同余公式吗?
第二个双生成看起来实际上是完全随机的,这样做安全吗?首先生成一个未使用的随机数,然后开始使用它的实际原因,这样可以吗?
提前谢谢你
编辑:
让我澄清:
int possibleRoutes = 7;
void handlePacket(Packet p) {
int chosenRoute = p.hash % possibleRoutes;
// ...Other code...
}与
int possibleRoutes = 7;
void handlePacket(Packet p) {
Random r = new Random(p.hash);
int chosenRoute = r.nextInt() % possibleRoutes;
// ...Other code...
}}
与
int possibleRoutes = 7;
void handlePacket(Packet p) {
Random r = new Random(p.hash);
r.nextInt();
int chosenRoute = r.nextInt() % possibleRoutes;
// ...Other code...
}一个保证是每个包必须采取相同的路线。目前,数据包哈希本质上是连续的。有太多的可能散列来保持任何类型的状态来加快速度。
发布于 2017-01-15 18:59:43
你为什么要给一个特殊的数字作为种子?只需将其保留为空,那么随机构造函数将为您选择一个种子。
for (int s = 0; s < 600; s++) {
Random r = new Random();
System.out.println(r.nextDouble());
System.out.println(r.nextDouble() + "\n-----");
}发布于 2017-01-15 19:02:35
调用默认构造函数,该构造函数使用nanoTime作为种子。这样,每次迭代都不需要生成新的种子来创建对象。
//loop through number of numbers needed
for(int i = 0; i < 100; i +)
//Calls default constructor
Random r = new Random();
System.out.println(r.nextDouble()*.5);发布于 2017-01-15 20:43:59
另一种选择是使用一个主随机数来为循环中的所有补贴随机图种子:
Random masterRand = new Random();
for (int s = 0; s < 600; s++) {
Random r = new Random(masterRand.nextLong());
System.out.println(r.nextDouble());
System.out.println(r.nextDouble() + "\n-----");
}https://stackoverflow.com/questions/41664966
复制相似问题