2012-03-10 79 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; 
    }