我只知道如何生成随机布尔值(true / false)。 默认概率为50:50
但是如何用自己的概率生成真正的假值? 假设它以40:60或20:80等概率返回true ...
答案 0 :(得分:40)
好吧,一种方法是Random.Next(100) <= 20 ? true : false
,使用NextInt的整数值强制你自己的概率。我无法说出真正的随机性&#39;但是这种方法。
更详细的例子:
Random gen = new Random();
int prob = gen.Next(100);
return prob <= 20;
答案 1 :(得分:17)
您生成一个最多100个独占的随机数,并查看它是否小于给定的百分比。例如:
if(random.Next(100) < 40) {
// will be true 40% of the time
}
更一般地说,对于X / Y的概率,使用如下的习语:
if(random.Next(Y) < X)
答案 2 :(得分:10)
这是一个扩展方法,它将提供一个指定概率(百分比)为true的随机bool;
public static bool NextBool(this Random r, int truePercentage = 50)
{
return r.NextDouble() < truePercentage / 100.0;
}
你可以像
一样使用它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
答案 3 :(得分:8)
假设你的概率表示为double
介于0.0和1.0之间,我会更简单地实现它:
Random rand = new Random();
...
double trueProbability = 0.2;
bool result = rand.NextDouble() < trueProbability;
result
将true
的概率为trueProbability
http://msdn.microsoft.com/en-us/library/system.random.nextdouble(v=vs.110).aspx
如果这不是&#34; 随机&#34;,您可以查看RNGCryptoServiceProvider
:
答案 4 :(得分:2)
我认为它可以帮到你
prepareAsync()
答案 5 :(得分:0)
为了将来的知识:
40:60将是:
var random = new Random();
return random.Next(10) < 4;
20:80将是:
var random = new Random();
return random.Next(5) == 0
和1:1将是:
var random = new Random();
return random.Next(2) == 1;
注意:只需缩短最短变体的概率 - 例如:&#34; random.Next(5)== 0&#34;然后更快&#34; random.Next(100)&lt; = 20 虽然 - 如果概率从用户输入改变 - 那么它看起来像:
[ModifierByChoice] bool GetProbability(int trueProbability, int falseProbability)
{
var random = new Random();
return random.Next(trueProbability, trueProbability + falseProbability) < trueProbability;
}
答案 6 :(得分:-3)
Random gen = new Random();
var boolVal = gen.Next(0, 1)==1? true : false;