我正在寫一個程序,有6個不同的圖片,並顯示12個瓷磚,每個圖片的兩個。這是一款記憶遊戲,我正致力於生成隨機拼貼。我需要使用RandomIntGenerator來分佈整個棋盤,但是我不能想辦法做到這一點,因爲RandomIntGenerator會重複數字。我不允許使用數組,這會讓這更容易。你能否告訴我如何做到這一點?隨機產生整數不重複,沒有陣列
任何幫助真的很感激! -Ryan
我正在寫一個程序,有6個不同的圖片,並顯示12個瓷磚,每個圖片的兩個。這是一款記憶遊戲,我正致力於生成隨機拼貼。我需要使用RandomIntGenerator來分佈整個棋盤,但是我不能想辦法做到這一點,因爲RandomIntGenerator會重複數字。我不允許使用數組,這會讓這更容易。你能否告訴我如何做到這一點?隨機產生整數不重複,沒有陣列
任何幫助真的很感激! -Ryan
你可以試試這個:
int suggestedPlacement = RandomIntGenerator.next();
while (tileAlreadyTaken(suggestedPlacement)) {
suggestedPlacement = RandomIntGenerator.next();
}
問題是關於如何實現這個邏輯的tileAlreadyTaken部分,而不是維護已經拍攝的一系列圖塊。 – joews
什麼是RandomIntGenerator?你可以請鏈接javadoc –
創建List<Integer>
有12個值(1-12)
List<Integer> list = new ArrayList<Integer>(12);
for(int i = 0; i < 12 ; i++){ list.add(i);}
,然後將它洗
這真是太棒了! – iluxa
是的,看起來你需要隨機洗牌你的卡秒。你可以實現你的簡單Fisher-Yates洗牌的版本,例如,或者實際上,使用Collections.shuffle()
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);
}
有些評論將有助於改進此答案 –
我只是建議使用位掩碼而不是數組來避免重複。 imho代碼非常原始 – twester
'RandomIntGenerator'是不是一類我是知道的,而是幫助你一點,搜索'HashSet'幫助。 – Marcelo