多次洗牌

时间:2013-06-18 18:04:18

标签: java android list shuffle

我有2个列表,我在oncreate()的开头随机播放,然后我想在稍后按下“新游戏”按钮时再次将它们洗牌。他们第一次洗牌我用过:

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和种子的名称,但它无法正常工作。在第二次洗牌之后,列表不匹配。关于我应该尝试什么的任何建议?

1 个答案:

答案 0 :(得分: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;
    }
}

重复运行代码将导致不同的有序列表,但值仍将配对。