我有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;
}
}
重复运行代码将导致列表顺序不同,但是值仍将配对。