2013-06-18 50 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; 
    } 
} 

运行代码多次将导致不同的有序列表,但值仍然会配对。