2016-04-28 68 views
-1

我正在使用隨機數,並且我生成0到7之間的隨機數。但是有一個問題:隨機數有時會重複以前的數。
我在按鈕單擊時生成一個隨機數;所以點擊按鈕我有時真的會得到一個不同的隨機數,但有時它開始重複數字。舉個例子:如何生成不重複的隨機數

在按鈕的點擊,有時0-7的範圍之間重複數,如:

1-3-4-3-6-3-5-5
正如你可以看到,3次重複多次,5次同時出現兩次。

所以,有兩種不同類型的重複。我寫了下面的代碼,這是應該殺第二次重複(5重複):

int randomNumber; 
do { 
    randomNumber = random.nextInt(7 - 0 + 1) + 0; 
} while (randomNumber == lastRandomNumber); 
lastRandomNumber = randomNumber; 
Log.d("RandomNumber","= "+randomNumber); 
return randomNumber; 

現在我想:

它跟蹤的最後一個隨機數,但現在我想跟蹤所有以前生成的隨機數。但我該怎麼做?什麼是實現這一目標的最佳方式?請引導我或分享一些代碼。

回答

6
Integer[] arr = {...}; 
Collections.shuffle(Arrays.asList(arr)); 
實施例

List<Integer> ran_num; 
     public static void main(String[] args) { 
      Integer[] arr = new Integer[1000]; 
      for (int i = 0; i < arr.length; i++) { 
       arr[i] = i; 
      } 
      Collections.shuffle(Arrays.asList(arr)); 

      ran_num=new ArrayList<Integer>(Arrays.toString(arr)); 

     } 

的abvoe代碼可以在 找到:Java generating non-repeating random numbers

從所生成的列表取一個號碼,然後將其刪除。 下一次從同一個列表中獲取一個數字。現在

對於您想獲取新的號碼,每次創建一個額外的方法,你的情況:

public static int fetch(){ 

    int num=ran_num.get(0); 
    ran_num.remove(0); 

if(ran_num.size()==0) 
// call some method to regenerate the list as explained in above code 

return num; 
} 
+2

這是什麼,我如何使用? –

+1

這是獲得隨機數字的另一種方法,但我相信這不是你想要的。 – dquijada

+0

對不起ali khalil我誤解了這個問題。您可以使用7個數字生成一個列表,然後從列表中刪除最後選擇的數字。下一次從接下來的6個剩餘數字中獲得隨機數 – ashwinbhy