无限条上索引的java伪随机
我想创建一个类,它表示一个无限(2^32可以被认为是无限)带,带上有伪随机数。界面应该非常简单;构造函数应该获得Random
的实例;应该有一种方法来获取索引的随机数
注意,我不想存储一个巨大的查找表并预先计算它;我希望这件事能马上完成
public class InfiniteRandomStrip {
public InfiniteRandomStrip(Random r) {
...
}
public int getNumber(int index) {
// magic code here
}
}
请注意,代码应通过以下测试:
Random seed = new Random(123);
Random seed2 = new Random(123);
InfiniteRandomStrip strip = new InfiniteRandomStrip(seed);
InfiniteRandomStrip strip2 = new InfiniteRandomStrip(seed2);
int first = strip.getNumber(454); // consume the random
if(strip.getNumber(5) == strip2.getNumber(5) )
System.out.println("TEST1 OK");
if(first == strip.getNumber(454) )
System.out.println("TEST2 OK");
对于这种随机列表情况,我没有找到任何示例或算法。如果这样的问题没有解决办法,我将很高兴听到一个解释
# 1 楼答案
# 2 楼答案
可以在
getNumber
方法中克隆Random
对象,以便每次从同一种子开始。然后反复计算nextInt
,直到找到正确的索引