我有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和seed的名称,但它无法正常工作。在第二次随机播放之后,列表不匹配。关于我应该尝试的任何建议?

最佳答案

解决您的问题的一种可能方法是将两个列表中的值包装在一个类中。然后将这些类的对象添加到一个列表中并对其进行随机排序,例如:

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


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

07-25 22:34