c# - C#快速生成随机数

标签 c# random

我正在创建一个程序,它创建几个面板,这些面板具有随机确定的颜色,每 20 毫秒左右按某个随机常数递增/递减,以创建平滑、起伏的颜色。为此,我一直在使用 Random 类的 Next(int) 方法。对于单个实例,这非常有效——每次我运行程序时,我都会看到不同的颜色以不同的速率变化。当我尝试创建多个面板时,问题就来了——即使不是全部,大多数面板看起来和行为都相同,这意味着所有随机生成的数字都是相同的。我假设这是快速连续生成所有伪随机数的结果,导致所有伪随机数都基于相同的种子。

有没有比使用 Random 类快速连续生成随机整数以确保它们不相同更好的方法?如果没有任何方法已经内置到 C# 中,是否有任何直接的方法来开发伪随机数生成器(请记住,这是我第一次尝试使用 C#)?

最佳答案

不要使用默认构造函数使用随机类的多个实例。如果它们都在同一个时间片内初始化,它们将具有相同的种子,并将生成相同的随机数序列,使用 you can pass in a seed 的构造函数并将不同的种子传递给每个实例。

Random rand0, rand1, rand2;

void init()
{
      int baseSeed = (int) DateTime.Now.Ticks;
      rand0 = new Random(baseSeed);
      rand1 = new Random(baseSeed + 1);
      rand2 = new Random(baseSeed + 2);
}

此外,每个线程只需要一个对象,如果所有面板都在同一线程上,则对所有面板使用相同的 Random 对象。

关于c# - C#快速生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9402674/

相关文章:

c - 不使用随机函数生成随机数

iphone - Cocos2D随机 Sprite 运动

javascript - 如何将超链接插入 Javascript 随机文本数组?

c# - 是否可以指定代码契约以确保该方法不会更改对象的状态

c# - 如何异步等待 x 秒然后执行某些操作?

c# - MVC1000 使用 IHtmlHelper.Partial 可能会导致应用程序死锁。考虑使用 <partial> 标签助手或 IHtmlHelper.PartialAsync

c# - 按住按钮时播放声音

c# - 如何识别表格外的点击和另外一个问题

javascript - 随机数范围的不同概率

java - 随机字符和随机颜色生成器