我想创建一个算法来生成对象。它需要两个种子:一个硬种子(每个宇宙/每个游戏一个,在 ini 文件中设置)和一个“软”种子,由使用该函数的每个对象传递给函数。(软种子属于对象,在函数调用之间不会改变)。此函数的目的是为每个对象输出一个“唯一”的随机数(0-100 之间),但可重复:每次生成对象时输出的数字都是相同的(只要保留硬种子)相同)。
在函数外部声明 Random 并使用 nextDouble() 给了我很好的分布,但意味着如果对象无序生成(这是可能的,程序将以不同的顺序生成对象),则对象将无法重复。
在函数中重新创建 Random 会给我一个糟糕的数字分布。
我的分布不均匀是因为播种/种子重量不好吗?如何改进此功能?
以下是伪代码:我设置的一个测试类:
public class SeedRandomTest {
int hardSeed = 100;
Random generator = new Random(hardSeed);
public SeedRandomTest(){
for (int i = 0; i < 10; i++){
algorithmRand(i);
}
}
public void algorithmRand(int seed){
//seed would be a argument, hardseed from config properties
int i = 0;
int genSeed = hardSeed + seed*100;
// Random generator = new Random(genSeed);
generator.setSeed(genSeed);
double j = (generator.nextDouble() * (100));
i = (int) j;
System.out.println("num = "+ i);
}
}