我想在代码中添加一些随机行为。我想使用时间戳值。通过这种方式,我想用当前时间戳对列表进行混洗。这是我的代码:
Random random = new Random(SimClock.getIntTime());
Collections.shuffle(list, random);
如果我不使用随机var随机播放列表,则随机播放可以正常工作。但是,当我使用上面列表中的代码时,输出列表始终是相同的(永远不会被打乱)。
每次调用Collections.shuffle时,随机值都会更改(我检查了一次),所以我不知道为什么在使用随机值时不对我的列表进行混洗。为什么会这样?
更新
list是一个具有以下值的ArrayList:[MIX0,MIX1]。
这是在同一执行中三次调用shuffle时的列表值和随机var的值:
randon value: 25214903885
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]
randon value: 25214903895
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]
randon value: 25214903865
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]
从Eclipse变量值中复制随机值。
当我使用不带随机值的随机播放方法时,有时会通过以下方式对列表进行随机播放:[MIX1,MIX0]。
答案 0 :(得分:0)
我使用了以下代码:
public static void main(String[] args) throws IOException {
List<String> arr = new ArrayList<>(3);
arr.add("aaa");
arr.add("bbb");
arr.add("ccc");
for (int i = 0; i < 4; i++) {
Collections.shuffle(arr, new Random(System.currentTimeMillis()));
System.out.println(ArrayUtils.toString(arr));
}
}
退出:
[ccc,aaa,bbb]
[bbb,ccc,aaa]
[aaa,bbb,ccc]
[ccc,aaa,bbb]
在new Random(...)
的自变量中输入恒定值时,所有输出将相同。