2012-05-07 172 views
0

如何在0到1之间生成随机值订购而无需在每次迭代中进行测试if生成订单随机值

0.01 
0.12 
0.2 
0.33 
... 
+0

你有一些最好的解决方案,(我无法达到我的知识)。尝试接受它们 – Maddy

回答

2

取决于你想要什么:

一)让N个随机数,为了使下一个随机数创建随机数,与多对它们进行排序

B)(1-最后一个号码)并添加最后一个号码。

注意,结果的分布非常不同

1

假设通过订购你的意思是排序,你可以创建一个随机数序列,将它们添加到集合,然后排序。

3

您可以使用TreeSet

进一步提供关于元素的总体排序的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 

编辑: 如果为了其中一个随机数是取决于前一个数字产生的随机数,我不认为这是随机数。

+0

最后一代TreeSet ordred值,而不是在生成值时! – Mehdi

+0

@ user15992看到我编辑的答案。 –

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; 
} 

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

+0

是的,它不错,但它不仅在0和1之间产生:D – Mehdi