我有一个N
个对象列表
我想插入X
虚拟对象,这些对象随机放置在真实N
对象之间,间隔在(0,N)之间。
所以我尝试了以下代码。
int[] dummyIndexes = new int[X];
int randomStep = N/X * 2; // *2 because the Mean is N/X/2
Random random = new Random();
int randIdx = 0;
for (int i=0; i < X; i++)
{
randIdx += random.nextInt(randomStep);
dummyIndexes[i] = randIdx;
}
这样做没问题,虽然我没有得到一个好的分发到域N
的末尾。
有什么更好的方法可以做到这一点?
答案 0 :(得分:1)
这将确保每个N / X之间有一个随机值
randIdx = N * i / X + random.nextInt(N / X) + 1;
答案 1 :(得分:0)
这样做会有所帮助(但请注意,它会更新在N处放置任何东西,最大值将是N-1)
int[] dummyIndexes = new int[X];
int randomStep = N/X;
Random random = new Random();
int randIdx = 0;
for (int i=0; i < X; i++)
{
randIdx = randomStep * i + random.nextInt(randomStep);
dummyIndexes[i] = randIdx;
}