如何在0到1之间生成随机值 Ordered 而不在每次迭代时进行测试if
?
0.01
0.12
0.2
0.33
...
答案 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)
假设按顺序排序你的意思是排序,你可以创建一系列随机数,将它们添加到集合中然后对其进行排序。