2012-05-07 103 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