我正在寻找一种用数据填充大int[] testArray
的简单方法。方法应该接受一个参数来生成一个确定的整数序列,但乍看之下看起来像噪声。
想到这样的事情,但数据可能有模式。
public int[] populate(int arraySize, int somePrime){
int[] testArray = new int[arraySize];
int offset = -100000;
long fib = 0; long fibm1 = 1; long fibm2 = 1;
//...
for(int i = offset; i< testArray.length; i++){
fib= fibm1+ fibm2;
fibm2= fibm1;
fibm1= fib;
if(i >= 0){ testArray[i] = (int) fib%somePrime; }
}
return testArray[i];
}
什么是更好的方法?
答案 0 :(得分:5)
您可以通过使用固定种子初始化随机数生成器来完成此操作。它生成的序列对于不知道种子的人来说是随机的,但是你可以通过再次使用相同的种子来重建序列。
例如:
Random r = new Random(mySeed);
int[] testArray = new int[arraySize];
for(int i=0; i<arraySize; i++) {
testArray[i] = r.nextInt();
}
更新:此方法很容易通过反复试验来猜测您的种子,特别是如果它是一个小数字或其他可预测的。您还可以存储一个秘密的固定种子,并将两者合并为一个更长的种子。但是你应该小心你如何做到这一点,因为存在陷阱。请参阅Deterministically combine more than one source of entropy。
答案 1 :(得分:1)
您可以使用SecureRandom
。然后你可以使用你的号码来生成种子:
int seed = 1234;
Random rand = new SecureRandom(SecureRandom.getSeed(seed));
int number = rand.nextInt();