2013-10-28 136 views
2

我正在寫一個程序,有6個不同的圖片,並顯示12個瓷磚,每個圖片的兩個。這是一款記憶遊戲,我正致力於生成隨機拼貼。我需要使用RandomIntGenerator來分佈整個棋盤,但是我不能想辦法做到這一點,因爲RandomIntGenerator會重複數字。我不允許使用數組,這會讓這更容易。你能否告訴我如何做到這一點?隨機產生整數不重複,沒有陣列

任何幫助真的很感激! -Ryan

+0

'RandomIntGenerator'是不是一類我是知道的,而是幫助你一點,搜索'HashSet'幫助。 – Marcelo

回答

0

你可以試試這個:

int suggestedPlacement = RandomIntGenerator.next(); 

while (tileAlreadyTaken(suggestedPlacement)) { 
    suggestedPlacement = RandomIntGenerator.next(); 
} 
+0

問題是關於如何實現這個邏輯的tileAlreadyTaken部分,而不是維護已經拍攝的一系列圖塊。 – joews

+0

什麼是RandomIntGenerator?你可以請鏈接javadoc –

7

創建List<Integer>有12個值(1-12)

List<Integer> list = new ArrayList<Integer>(12); 
for(int i = 0; i < 12 ; i++){ list.add(i);} 

,然後將它洗

Collections.suffle(list)

+1

這真是太棒了! – iluxa

2

是的,看起來你需要隨機洗牌你的卡秒。你可以實現你的簡單Fisher-Yates洗牌的版本,例如,或者實際上,使用Collections.shuffle()

0
long pattern = 0b111111; 
Random r = new Random(); 
while (pattern != 0) { 
    int n = r.nextInt(6); 
    long mask = 1 << n; 
    if ((pattern & mask) == 0) continue; 
    pattern ^= mask; 
    System.out.println("n = " + n); 
} 
+1

有些評論將有助於改進此答案 –

+0

我只是建議使用位掩碼而不是數組來避免重複。 imho代碼非常原始 – twester