生成随机布尔概率

Dar*_*ide 26 .net c# random boolean probability

我只知道如何生成随机布尔值(true/false).默认概率为50:50

但是,如何以自己的概率生成真正的假值?假设它以40:60或20:80等概率返回true ...

E. *_*fat 44

好吧,一种方法是Random.Next(100) <= 20 ? true : false,使用NextInt的整数值来强制你自己的概率.我不能说这种方法的真正"随机性".

更详细的例子:

Random gen = new Random();
int prob = gen.Next(100);
return prob <= 20;
Run Code Online (Sandbox Code Playgroud)

  • @E。莫法特:`?true : false` 是多余的代码。 (2认同)

Pet*_* O. 18

您生成一个最多100个独占的随机数,并查看它是否小于给定的百分比.例:

if(random.Next(100) < 40) {
  // will be true 40% of the time
}
Run Code Online (Sandbox Code Playgroud)

更一般地说,对于X/Y的概率,使用如下的成语:

if(random.Next(Y) < X)
Run Code Online (Sandbox Code Playgroud)


Ham*_*jam 10

这是一个扩展方法,它将提供一个具有指定概率(百分比)为真的随机bool;

public static bool NextBool(this Random r, int truePercentage = 50)
{
    return r.NextDouble() < truePercentage / 100.0;
}
Run Code Online (Sandbox Code Playgroud)

你可以使用这个

Random r = new Random();
r.NextBool(); // returns true or false with equal probability
r.NextBool(20); // 20% chance to be true;
r.NextBool(100); // always return true
r.NextBool(0); // always return false
Run Code Online (Sandbox Code Playgroud)


小智 8

假设你的概率表示double在0.0和1.0之间,我会更简单地实现它:

Random rand = new Random();
...
double trueProbability = 0.2;
bool result = rand.NextDouble() < trueProbability;
Run Code Online (Sandbox Code Playgroud)

result将以true给定的概率trueProbability

http://msdn.microsoft.com/en-us/library/system.random.nextdouble(v=vs.110).aspx

如果这不是" 随机 ",你可以看看RNGCryptoServiceProvider:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider(v=vs.110).aspx


小智 7

我认为它可以帮助你

Random gen = new Random();
bool result = gen.Next(100) < 50 ? true : false;
Run Code Online (Sandbox Code Playgroud)

  • 表达式 `gen.Next(100) &lt; 50` 是布尔表达式。这里不需要使用条件运算符。 (10认同)