2013-01-05 95 views
2

我試圖獲得一個隨機數列表,並將其放入隊列中,而沒有任何重複的隨機數。java中的隨機唯一編號

 int number = 40; 

     for (int j = 0; j<number; j++) 
     { 
      int pick = random.nextInt(number); 
      myQueue.add(Integer.toString(pick)); 
     } 
     System.out.println("the queue size: "+myQueue.size()); 
     Iterator it = myQueue.iterator(); 
     while(it.hasNext()){ 
       String iteratorValue = (String)it.next(); 
       System.out.println("queue next value: "+iteratorValue); 
     } 

與上面的代碼,我得到了隨機數

人的一些反覆知道如何做到這一點?

+2

你可以產生什麼樣的隨機數有任何範圍? – templatetypedef

+0

範圍是40 –

+1

今天很受歡迎。 [在Java中生成唯一的隨機數]的 –

回答

8

如何:

List<String> list = new ArrayList<String>(number); 

for (int i = 0; i < number; i++) 
    list.add(Integer.toString(i)); 

Collections.shuffle(list); 

myQueue.addAll(list); 

「添加獨特的隨機數」在一定範圍內,相當於將所有的號碼的範圍,然後洗牌的結果。

+1

Heheheh。隨機播放一整天 – nullpotent

+0

ANW,我在Collections.shuffle(myQueue中)遇到錯誤。我已經導入java.util.Collections中......錯誤是「不適合發現洗牌」 –

+0

'Collections.shuffle'僅適用於一個'List',而不是一個'Queue'。也許先洗個清單,然後把它放到隊列中? –

3

創建一個集合並在生成它時添加數字。每次您生成新號碼時,請檢查Set是否已包含該值。繼續生成新號碼並檢查設置,直到找到尚未存在的號碼。

東西沿着這些路線......(注:Set.add(...)返回false如果該值已經設置的,所以do-while循環繼續,直到生成一個唯一的編號。)

int number = 40; 
    Set mySet = new HashSet(); 
    for (int j = 0; j<number; j++) 
    { 
     Integer pick; 

     do{ 
      pick = random.nextInt(number); 
     } while(!mySet.add(pick)); 
     myQueue.add(Integer.toString(pick)); 
    } 
    System.out.println("the queue size: "+myQueue.size()); 
    Iterator it = myQueue.iterator(); 
    while(it.hasNext()){ 
      String iteratorValue = (String)it.next(); 
      System.out.println("queue next value: "+iteratorValue); 
    } 

雖然作爲通過ARS提到的,你似乎並沒有尋找一個隨機唯一的編號,而是0和40之間的所有數字的隨機洗牌的列表。如果是這樣的話,使用他/她的解決方案,因爲它是一個更好的辦法實現這一目標。

0

如果有一個小範圍的隨機數,那麼你可以簡單地生成可用值列表,該列表上使用Collections.shuffle