2012-03-10 96 views
3

我有一个N对象的列表。
我想插入X虚拟物体,这些虚拟物体随机放置在真实的物体之间,间隔在(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

在我看来,如果'randomStep'不是=='N',那么得到的随机数将不会均匀分布到'N'。 – 2012-03-10 12:47:54

+0

我认为你应该做'random.nextInt(randomStep)+ 1',否则如果结果为零,你会得到两个或多个实际上是同一个的虚拟索引。 – Yoni 2012-03-10 12:48:10

+0

而且,当然,请注意,如果您想要获取'N'的值,则需要为'nextInt'指定'N + 1'。 – 2012-03-10 12:50:30

回答

1

这将确保您之间的一个随机值每N/X

randIdx = N * i/X + random.nextInt(N/X) + 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; 
    }