C#中的加权随机数生成

bug*_*ger 7 .net c# random algorithm

如何随机生成两种状态中的一种,10%的时间内产生"红色"概率,90%的时间产生"绿色"?

背景

每2秒,绿灯或红灯都会闪烁.

该序列将持续5分钟.

闪烁灯的总发生次数应为300.

Mic*_*ael 33

Random.NextDouble返回0到1之间的数字,因此以下内容应该有效:

if (random.NextDouble() < 0.90)
{
    BlinkGreen();
}
else
{
    BlinkRed();
}
Run Code Online (Sandbox Code Playgroud)


jas*_*son 7

Random rg = new Random();

int n = rg.Next(10); 
if(n == 0) {
    // blink red
}
else {
    // blink green
}
Run Code Online (Sandbox Code Playgroud)

要么

Random rg = new Random();

double value = rg.NextDouble();
if(value < 0.1) {
    // blink red
}
else {
    // blink green
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为Random.Next(int maxValue)返回一个均匀分布的整数[0, maxValue)Random.NextDouble返回一个均匀分布double[0, 1).

  • @Krik Broadhurst:注意``[0,maxValue)`上的右符号是'')'`而不是'']'`.这意味着极值(`maxValue`)不包含在范围内.因此,`[0,maxValue)= {0,1,2,3,4,5,6,7,8,9}. (2认同)