0

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

4

1 回答 1

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;
    }
}

重复运行代码会产生不同的有序列表,但值仍然是成对的。

于 2013-06-18T18:28:54.327 回答