2013-06-18 55 views
0

我在我的oncreate()開頭打了2個清單,然後我想在稍後點擊一個「新遊戲」按鈕時再次洗牌。他們第一次洗牌我用:多次洗牌清單

final Random rnd = new Random(); 
final int seed = rnd.nextInt(); 

rnd.setSeed(seed); 
Collections.shuffle(Arrays.asList(answerChoices),rnd); 
rnd.setSeed(seed); 
Collections.shuffle((resources),rnd); 

一切工作正常。然而,當我嘗試再次按下「新遊戲」按鈕時再次洗牌時,我嘗試使用與上面相同的方法,並嘗試更改rnd和seed的名稱,但它無法正常工作。第二次洗牌後,列表不符合他們應該。有什麼我應該嘗試的建議?

+1

你是什麼意思的「名單不匹配,因爲他們應該」? –

+0

列表第二次洗牌,但他們不匹配。他們第一次洗牌他們匹配。通過匹配我的意思是列表1的第0行應該始終對應列表2的第0行,無論他們在被混洗後切換到哪裏。 – ez4nick

+2

所以,如果我正確理解你,你是隨機洗牌兩個名單,但期望他們有相同的結果?這看起來很危險,因爲不應該依賴'shuffle'的行爲是可重複的。我建議你使用另一種機制,例如將一個列表進行混洗,或者同時對兩個列表進行自己的混洗。 –

回答

2

您的問題的一個可能的解決方案是將您的兩個列表中的值包裝在一個類中。然後,這些類的對象添加到一個列表和洗牌,例如:

public class Test { 
    public static void main(String[] args) { 
     Random rnd = new Random(); 
     int seed = rnd.nextInt(); 
     rnd.setSeed(seed); 
     List<Pair> pairs = new ArrayList<Pair>(); 

     pairs.add(new Pair(1, "else")); 
     pairs.add(new Pair(2, "bar")); 
     pairs.add(new Pair(3, "pair")); 

     Collections.shuffle(pairs, rnd); 

     for (Pair pair : pairs) { 
      System.out.println(pair.drawable + " " + pair.sequence); 
     } 
    } 

} 

class Pair { 
    int drawable; 
    CharSequence sequence; 

    Pair(int drawable, CharSequence sequence) { 
     this.drawable = drawable; 
     this.sequence = sequence; 
    } 
} 

運行代碼多次將導致不同的有序列表,但值仍然會配對。