我需要一些关于C#代码中的百分比机会的帮助。假设我有一个从1到100的for循环,在这个循环中我有一个“if”代码,我希望被执行70%次(随机)。我如何实现这一点?所以类似于这样的东西:
static void Main(string[] args)
{
var clickPercentage = 70;
for (int i = 0; i < 100; i++)
{
if (chance)
{
//do 70% times
}
}
}
字符串
因此,对于上面的例子,我希望如果代码被击中的机会为70%,大约70次,我的例子。
我尝试过的事情:(不到70%,更像是1%或2%的机会)
static void Main(string[] args)
{
var clickPercentage = 70;
for (int i = 0; i < 100; i++)
{
var a = GetRadnomNumber(1, clickPercentage);
var b = GetRadnomNumber(1, 101);
if (a <= b)
{
Console.WriteLine($"Iteracija {i} - {b} <= {a}");
}
}
}
public static int GetRadnomNumber(int min, int max)
{
var random = new Random();
var retVal = random.Next(min, max);
return retVal;
}
型
5条答案
按热度按时间50pmv0ei1#
使用
Random
class。您可以使用
Random.Next(100)
来获得0到99之间的随机int
:字符串
重要的是,不要在循环中创建随机示例**因为它的默认构造函数使用当前时间作为种子。这可能会导致循环中的重复值。这就是为什么我使用
static
字段。您也可以将Random
示例传递给方法,以确保调用者对生存期和种子负责。有时使用相同的例如,重复相同的测试。j2datikz2#
把它作为一个函数:
字符串
并使用它:
型
muk1a3rh3#
不太确定你的逻辑,但从快速浏览,你正在创建一个循环中的随机对象。
这样做的问题是
Random
类使用当前时间作为种子。如果种子相同,Random
类将产生相同的随机数序列。由于现在的CPU速度非常快,通常会发生几次循环迭代将具有完全相同的种子,因此,随机数发生器的输出将是完全可预测的(并且与先前的输出相同)。为了避免这种情况,只需创建一次
Random
类的示例,并在代码中重用它,类似于字符串
m528fe3b4#
基本上你不需要在每次迭代中都创建一个新的
Random
-instance。简单的使用这个:字符串
也可以使用
if (p <= myThreshold)
。quhf5bfb5#
我最近也遇到了这个问题
字符串
这是一个很小的决策,它需要概率字段和期望值,在这种情况下,你可以插入7和10,就会有7到10的机会