gpt4 book ai didi

java - Collections.shuffle 无法按 SimClock 随机值的预期工作

转载 作者:行者123 更新时间:2023-12-01 22:08:49 24 4
gpt4 key购买 nike

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

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

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

每次调用 Collections.shuffle 时随机值都会发生变化(我检查过),所以我不知道为什么当我使用随机值时我的列表没有被打乱。为什么会发生这种情况?

更新

list 是一个 ArrayList,其值为:[MIX0, MIX1]。

这是在同一次执行中调用 3 次 shuffle 时列表和随机变量的值:

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

最佳答案

我使用了以下代码:

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(...) 的参数中输入常量值时,所有输出都将相同。

关于java - Collections.shuffle 无法按 SimClock 随机值的预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com