生成有序的随机值

时间:2012-05-07 09:07:08

标签: java random

如何在0到1之间生成随机值 Ordered 而不在每次迭代时进行测试if

0.01
0.12
0.2
0.33
...

4 个答案:

答案 0 :(得分:3)

您可以使用TreeSet

  

进一步提供其元素的总排序的集合。该   元素按照自然顺序或比较器排序   通常在排序集创建时提供。集合的迭代器   将按升序元素顺序遍历集合

E.g。

public static void main(String[] args) {
    SortedSet<Float> randoms = new TreeSet<Float>();
    Random random = new Random();
    while(randoms.size() < 5) {
        randoms.add(random.nextFloat());
    }
    for(Float r: randoms) {
        System.out.println(r);
    }
}

输出

0.017743647
0.1998645
0.37926406
0.39519936
0.7745726

编辑: 如果按顺序生成随机数,其中下一个随机数取决于之前的数字,我不认为它是随机数。

答案 1 :(得分:2)

取决于你想要的东西:

a)制作n个随机数并对它们进行排序

b)为了使下一个随机数创建一个随机数,乘以(1-最后一个数字)并添加最后一个数字。

请注意,生成的分布非常不同

答案 2 :(得分:2)

以下代码可确保每个下一个数字都大于之前的数字。这个数字是随机的。对你有好处吗?

Random r = new Random();
double[] results = new double[n];
double prev = 0;
for (int i = 0;  i < n;  i++) {
    double next = prev + r.nextDouble();
    results[i] = next;
    prev = next;
}

缺点是数字不受任何预定义阈值的限制。如果你需要这个,我建议你只生成数组,然后使用Arrays.sort()对其进行排序(正如许多其他人推荐的那样)。

答案 3 :(得分:1)

假设按顺序排序你的意思是排序,你可以创建一系列随机数,将它们添加到集合中然后对其进行排序。