Collections.shuffle无法与SimClock Random值一起正常工作

问题描述 投票:0回答:1

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

Random random = new Random(SimClock.getIntTime());
Collections.shuffle(list, random);

如果我不使用随机变量来随机播放列表,则随机播放可以正常工作。但是,当我使用上面列表中的代码时,输​​出列表始终是相同的(从不乱序)。

随机值每次调用Collections.shuffle时都会更改(我检查了它),所以我不知道为什么当我使用随机值时不对我的列表进行混洗。为什么会这样?

更新

列表是一个具有以下值的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 Variables值中复制的。

当我使用不带随机值的随机播放方法时,列表有时会通过这种方式随机播放:[MIX1,MIX0]。

java random time shuffle
1个回答
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));
   }
}

out:[ccc,aaa,bbb][bbb,ccc,aaa][aaa,bbb,ccc][ccc,aaa,bbb]

当在new Random(...)的参数中输入常数时,所有输出将相同。

© www.soinside.com 2019 - 2024. All rights reserved.