0

如何生成在 0 和 1 之间排序if的随机值而不在每次迭代时进行测试?

0.01
0.12
0.2
0.33
...
4

4 回答 4

3

您可以使用树集

进一步提供对其元素的总排序的 Set。元素使用它们的自然顺序进行排序,或者由通常在排序集创建时提供的比较器进行排序。集合的迭代器将按元素升序遍历集合

例如

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

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

于 2012-05-07T09:12:50.473 回答
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()(正如许多其他人推荐的那样)对其进行排序。

于 2012-05-07T09:15:33.540 回答
2

取决于你想要什么:

a) 生成 n 个随机数并对它们进行排序

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

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

于 2012-05-07T09:09:38.183 回答
1

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

于 2012-05-07T09:10:22.230 回答