2014-01-30 89 views
0

我需要從一定範圍內生成4個不重複的數字。有沒有有效的方法來做到這一點?如何從一定範圍內生成4個不重複的數字?

+2

您的研發項目是什麼意思?你有沒有試圖首先在Google上搜索它? –

+0

如果您需要從序列中獲取數字,您可以使用原子整數或需要編寫代碼 – Kick

+0

http://stackoverflow.com/questions/4040001/creating-random-numbers-with-no-duplicates –

回答

1

如果您的範圍是[x,y],則在[x,y-3]中生成任意4個數字。
這4個數字可以重複,沒關係。
對它們排序。假設他們是:a1 < = a2 < = a3 < = a4。現在使用數字b1 = a1,b2 = a2 + 1,b3 = a3 + 2,b4 = a4 + 3,就好像它們是
生成的那樣。他們在[x,y]中並且不重複。

+0

可能的重複明白你想說什麼。可以更好地解釋 – Kick

+1

不,這是我最好的。你覺得更難嗎? –

+0

是的,這是...... – Kick

1

這是最簡單的方法。

final int LIMIT = 100; 
    final int COUNT = 4; 
    Set<Integer> randomNumbers = new HashSet<Integer>(COUNT); 
    while(randomNumbers.size() < COUNT) { 
     randomNumbers.add(new Random().nextInt(LIMIT)); 
    } 
+0

理論上這可能永遠不會完成,你的循環。至少它是非確定性的,即你不知道它將完成多少步。 –

0
 ArrayList<Integer> numbers= new ArrayList<Integer>(); 
     int from = 2, to = 100; 
     for(int i=from;i<=to;i++) 
     { 
      numbers.add(i); 
     } 
     Collections.shuffle(numbers); 

挑前四個數量從ArrayList中。

+0

如果你的範圍長度不是太大,這很好。但是如果你有1000萬個數字,那麼把它們加載到內存中就是爲了洗牌。 –

+0

但是如果我有大約120個數字,它會快速工作嗎? –

+0

我這麼認爲。取決於'Collections.shuffle(numbers)'的實現方式。應該沒問題,是的。 –

相關問題