2013-10-26 103 views
-1

如何防止隨機數發生器重複數字?如何防止隨機數字發生器重複數字?

下面是生成隨機數我的代碼的一部分:

String [] number = {"1","2","3","4","5","6"}; 
Random random = new Random(); 
int Select = random.nextInt(number.length); 
System.out.println(number[Select]); 

有時是重複的數字,如「4」,然後在「4」一次。我希望它總是一個不同的數字。

+0

請大家停止使用數組字符串。這與問題的目的沒有關係。這不是如何使用Random.nextInt()的最簡單示例,而且這樣的示例很容易找到。 – clwhisk

+0

@ user2921909:如果有答案解決了您的問題,請點擊複選標記考慮[接受](https://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 –

回答

3

我會做這樣

class Generator { 
    List<String> number = Arrays.asList("1", "2", "3", "4", "5", "6"); 
    int n = 0; 

    Generator() { 
     Collections.shuffle(number); 
    } 

    String next() { 
     return number.get(n++); 
    } 
-1

嗯,我不是百分之百到你的代碼,但它看起來好像你打印出一個數字的長度,而不是數字......爲什麼?你是否試圖阻止連續獲得兩個4位數字?好的,我明白了...... nvm。

編輯:好吧,讓它這樣,使數組在每次循環運行時都會刪除'select'變量(如果沒有它,則爲循環)。然後,該號碼不可能被選中。

+0

OP正在請求一個隨機數,其值不大於數組的長度(減1),然後從數組中選擇該值出現在該位置的值。他們的算法不是很正確,但並不完全錯誤。 –

+1

要求澄清應該是一個評論,而不是一個答案。 –

+0

對不起,我會編輯答案,當我有一個... – zingzing45

0

一個簡單的方法來做到這一點可能是:

store what values have already been generated in an array x 
while new value is in the var x 
    generate a new value again 
use new value in the way you want 
2

對於這樣一個小組數字(一個可以輕鬆地裝入內存),我想:

  1. 拷貝數成一個ArrayList<String>
  2. 使用Collections.shuffle隨機化這個名單
  3. 遍歷列表的值
+0

或調用列表中的remove()而不是迭代它 – vandale

1

這裏是我的解決方案.. 我使用ArrayList的,而不是因爲它的字符串規則排列..

import java.util.*; 

class RandomWithoutRepeat { 

    public static void main(String[] args) { 
     ArrayList<String> number = new ArrayList<String>(
     Arrays.asList("1","2","3","4","5","6")); 
     Random random = new Random(); 
     int size = number.size(); 
     int Select = random.nextInt(number.size()); 
     for(int i =0; i< size; i++) 
     { 
      Select = random.nextInt(number.size()); 
      System.out.println(number.get(Select)); 
      number.remove(Select); 
     } 

    } 
}