Java 创建一组均匀分布的随机数

Java 创建一组均匀分布的随机数,java,random,Java,Random,我有一个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 += rando

我有一个
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;
}
int[]dummyIndexes=newint[X];
int randomStep=N/X*2;//*2因为平均值是N/X/2
随机=新随机();
int randIdx=0;
对于(int i=0;i
这工作正常,尽管我没有得到一个好的分发版,一直到域的末尾
N


有什么更好的方法可以做到这一点?

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

 randIdx = N * i / X + random.nextInt(N / X) + 1;
这样就可以了(但请注意,它会将任何值放在N处,最大值为N-1)

int[]dummyIndexes=newint[X];
int-randomStep=N/X;
随机=新随机();
int randIdx=0;
对于(int i=0;i
在我看来,如果
randomStep
不是==
N
,那么生成的随机数将不会均匀分布到
N
。我认为您应该执行
random.nextInt(randomStep)+1
,否则如果结果为零,您将得到两个或多个虚拟索引,它们实际上是相同的。并且,当然,请注意,如果您希望可能获得
N
的值,则需要为
nextInt
指定
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;
    }