我有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和种子的名称,但它无法正常工作。在第二次洗牌之后,列表不匹配。关于我应该尝试什么的任何建议?
答案 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;
}
}
重复运行代码将导致不同的有序列表,但值仍将配对。