使用SimClock Random值,Collections.shuffle无法正常工作

时间:2019-11-02 16:03:48

标签: java random time shuffle

我想在代码中添加一些随机行为。我想使用时间戳值。通过这种方式,我想用当前时间戳对列表进行混洗。这是我的代码:

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]。

1 个答案:

答案 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(...)的自变量中输入恒定值时,所有输出将相同。

相关问题