gpt4 book ai didi

c# - 在循环内运行时,随机数生成器总是选择相同的值

转载 作者:太空狗 更新时间:2023-10-29 23:54:09 26 4
gpt4 key购买 nike

代码的问题是,当我尝试生成一个数字时,如果自旋等于 1,它会生成范围 (1,2,3) 内的值,如果尝试使用循环对同一范围内的随机值求和range 生成的随机数在循环中总是相同的,

例如,如果我运行循环:spind3 = 4 值从 4、8、12 开始spind3 = 5 值从 5、10、15 开始

这意味着 RandomNumber 第一次在循环内生成一个值时,在循环完成之前它永远不会改变。

if (toggled3.Checked)
{
if (spind3.Value != 1)
{
for (int i = 1; i <= spind3.Value; i++)
{
diceCalc[1] += RandomNumber(1, 4);
}
}
else
diceCalc[1] = RandomNumber(1, 4);
}

最佳答案

您可能正在 RandomNumber 方法中创建一个新的 Random 对象。 default constructor for Random 使用系统时间作为种子。如果您在紧密循环中创建多个 Random 对象,则每次调用之间的时间可能不会改变,因此它们都将使用相同的种子进行初始化。

要修复您的代码,您应该只创建一个 Random 对象并重复使用它。


来自documentation :

The default seed value is derived from the system clock and has finite resolution. As a result, different Random objects that are created in close succession by a call to the default constructor will have identical default seed values and, therefore, will produce identical sets of random numbers. This problem can be avoided by using a single Random object to generate all random numbers. You can also work around it by modifying the seed value returned by the system clock and then explicitly providing this new seed value to the Random(Int32) constructor. For more information, see the Random(Int32) constructor.

关于c# - 在循环内运行时,随机数生成器总是选择相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5398336/

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