java随机数种子_使用种子的Java随机数
使用種子的Java隨機數
這是我的代碼,使用種子作為參數來生成隨機數:
double randomGenerator(long seed) {
Random generator = new Random(seed);
double num = generator.nextDouble() * (0.5);
return num;
}
每次我提供種子并嘗試生成100個數字時,它們都是相同的。
我怎樣才能解決這個問題?
7個解決方案
73 votes
如果您給相同的種子,那是正常的。 這是允許測試的重要功能。
選中此選項可了解偽隨機生成和種子:
偽隨機數發生器
偽隨機數生成器(PRNG),也稱為確定性 隨機位發生器DRBG,是一種用于產生序列的算法 近似于隨機數屬性的數。 的 序列不是真正隨機的,因為它完全由 相對較小的一組初始值,稱為PRNG的狀態, 其中包括真正的隨機種子。
如果要具有不同的序列(通常在不調整或調試算法時使用),則應調用零參數構造函數,該構造函數使用nanoTime嘗試每次獲取不同的種子。 當然,此Random實例應保留在您的方法之外。
您的代碼可能應該是這樣的:
private Random generator = new Random();
double randomGenerator() {
return generator.nextDouble()*0.5;
}
Denys Séguret answered 2020-07-12T12:24:02Z
21 votes
簡單的方法是使用:
Random rand = new Random(System.currentTimeMillis());
這是生成Random數字的最佳方法。
Pollar answered 2020-07-12T12:24:27Z
11 votes
您不應該在方法范圍內創建新的Random。 使其成為班級成員:
public class Foo {
private Random random
public Foo() {
this(System.currentTimeMillis());
}
public Foo(long seed) {
this.random = new Random(seed);
}
public synchronized double getNext() {
return generator.nextDouble();
}
}
這僅僅是一個例子。 我認為這樣包裝Random不會增加任何價值。 將其放在正在使用的類中。
duffymo answered 2020-07-12T12:24:51Z
6 votes
這就是偽RNG的原理。 這些數字并不是真正隨機的。 它們是使用確定性算法生成的,但是根據種子的不同,生成數字的順序也會有所不同。 由于您始終使用相同的種子,因此始終獲得相同的序列。
JB Nizet answered 2020-07-12T12:25:11Z
2 votes
問題在于您再次為隨機生成器添加了種子。 每次播種時,都會重置隨機數生成器的初始狀態,并且生成的第一個隨機數將是初始狀態之后的第一個隨機數
Minion91 answered 2020-07-12T12:25:31Z
2 votes
如果要使用一個種子生成多個數字,可以執行以下操作:
public double[] GenerateNumbers(long seed, int amount) {
double[] randomList = new double[amount];
for (int i=0;i
Random generator = new Random(seed);
randomList[i] = Math.abs((double) (generator.nextLong() % 0.001) * 10000);
seed--;
}
return randomList;
}
如果使用相同的種子,它將顯示相同的列表。
user5479540 answered 2020-07-12T12:25:56Z
1 votes
這里的幾個示例創建了一個新的ThreadLocalRandom實例,但這不是必需的。 也沒有理由像一種解決方案一樣使用synchronized。 相反,請利用ThreadLocalRandom類上的方法:
double randomGenerator() {
return ThreadLocalRandom.current().nextDouble(0.5);
}
Finn answered 2020-07-12T12:26:18Z
總結
以上是生活随笔為你收集整理的java随机数种子_使用种子的Java随机数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 背包DP入门笔记(1) 骨头收集 HDU
- 下一篇: Java通过坐标点进行拟合函数