2012-01-23 34 views
1

我是Android新手,也是java。在我的應用程序中,我所需要的是隨機數字,它不會再一次重複。如何將數據放入整數數組

舉一個例子說我有一個TextView和一個按鈕,點擊按鈕時,它應該給我看隨機數,這些隨機數不應該重複。

爲此,我正在考慮將隨機數據存儲到數組中,並檢查隨機數是否在數組中,如果它不在數組中,它將暫時存儲該數字。應該給我看一些隨機數,就像在1-20之間說的那樣選擇了5,現在這個值應該被存儲到數組中,並且如果再次點擊下一個按鈕,那麼5數字就應該跳過這個數字。

請幫我解決這個問題,

+0

有什麼問題嗎? –

+0

你能展示一些代碼嗎? – Oyeme

回答

1

談到存儲您生成的隨機數據結構考慮使用java.util.Set存儲唯一的一組數字。檢查設置中是否已經存在一個編號使用Set#contains(Object o)方法。

CODE:

int max = 20; 
System.out.println("Generating random integers in range 0.." + max); 
Set<Integer> set = new HashSet<Integer>(max); 
Random randomGenerator = new Random(); 
while (set.size() <= max) { 
    int randomInt = randomGenerator.nextInt(max+1); 
    System.out.println("Generated : " + randomInt); 
    if (!set.add(randomInt)) 
     System.out.println("Set already has: " + randomInt); 
} 
System.out.println("Set has: " + set); 
+0

你可以給一些代碼來解釋這個我的朋友。 – MADDY

+0

此外,如果要添加的項目已經包含在Set中,則Set.add將返回false。它不會允許您添加重複項目。 – z12345

+0

@MADDY:我爲你添加了一些代碼。 – anubhava

1

用你的號碼依次創建一個數組。然後使用Fisher-Yates shuffle算法生成唯一的,不重複的隨機序列。

// Fisher-Yates shuffle. 
Random random = new Random(); 
int[] data = new int[20]; 
for (int i=0; i<20; i++) 
{ 
    data[i] = i; 
} 
for (int i=0; i<20; i++) 
{ 
    int j = random.nextInt(20); 
    int t = data[i]; 
    data[i] = data[j]; 
    data[j] = t; 
} 
0

我認爲這個問題與Java相關,而不是與Android相關。

如果您只需創建一小組唯一的隨機數,您可以將生成的數字存儲在地圖中,因此您可以在O(1)中確定數字是否在之前生成過。如果它之前沒有生成,則使用它並將其放入地圖中。否則創建一個新的並重復。

+0

你可以給我任何一個例子我的朋友。正如你所說的如何做到這一點,你可以用一個例子來解釋我。它將是一個很好的幫助 – MADDY

1

您應該首先創建一個Random的實例。這會爲你生成隨機數字。然後,您應該將所有已經生成的號碼保存在ArrayList<Integer>中,以便您可以跟蹤迄今爲止生成的號碼。

Random mRandom=new Random(); 
//Generate first number, int [0,20) 
int no=mRandom.nextInt(20); 
//keep that number 
ArrayList<Integer> mGeneratedSoFar=new ArrayList<Integer>(); 
mGeneratedSoFar.add(no); 

然後在點擊按鈕的處理程序,產生了到現在爲止生成的數字:

int no=mRandom.nextInt(20); 
while(mGeneratedSoFar.contains(no)){ 
    no=mRandmom.nextInt(20); 
} 
mGeneratedSoFar.add(no); 

編輯:和@Guido加西亞說,你可以保持你的號碼在其它類型CollectionMaps獲得更好的性能。但只要你產生少量的數字,我不認爲這會是一個問題。

+0

在第二行它給出了一個錯誤如下 – MADDY

+0

不能作出靜態引用來自Random – MADDY

+0

類型的非靜態方法nextInt(int)這是一個小錯誤。編輯答案。 –

0
java.util.Random generator;  
java.util.Set<Integer> nums; 
nums.add(generator.nextInt(20));