概率在C#中如何工作

时间:2018-07-03 22:56:32

标签: c#

我早些时候问过这个问题,但措辞都错了,因此试图使其更加清晰。

因此,要把它放在上下文中,我目前正在接受培训,成为一名软件开发人员,而且我一直在努力理解C#中的概率概念,我对C#完全陌生,并且发现这是最好的方法之一学习如何开发新的编码语言时,我可以找到获得支持的站点。

我正在尝试创建一个程序,该程序用作使用数字-1至3的随机数生成器,并为每个数字设置单独的概率。

我已经完全创建了可以随机打印-1到3范围内的4个数字的代码,但是我目前正努力了解如何分别对每个数字实现概率函数。

这是我当前的代码,用作随机数生成器,以平等的机会提取数字:

while (again)
{
    List<int> scores = new List<int>();

    Random generator = new Random();

    for (int i = 0; i < 4; i++)
    {
        int score = generator.Next(-1, 4);

        Console.WriteLine(score);

        scores.Add(score);
    }

    ConsoleKeyInfo keyPressed = Console.ReadKey();

    Console.Clear();

    if (keyPressed.Key != ConsoleKey.Spacebar)
    {
        break;
    }
}

我需要设置数字的概率是: [0.01,0.3,0.58,0.1,0.01] 到数字 [-1,0,1,2,3]

最初,我想为每个部分使用一个新的randomnumber类,以将其定义为概率,但不确定如何在C#中使用概率。

我知道我早些时候发布了这篇文章,但是我并没有写出应有的字眼,而是在询问诸如最好的方法或最有效的方法之类的东西,而当我真正需要知道的是概率如何时,这些方法就会被否定实际上是用C#创建的。

由于我尝试实现它的所有方法均无效,并且我在网上找到了其他解决方案,所以我将不胜感激,我不确定如何提取其他实际应用概率函数的代码,我知道还有其他代码可以提供完整的解决方案,但是我希望能够在自己的解决方案中实现一段代码,该代码将起作用,以便我可以更好地了解此函数的工作原理。

对此的帮助将不胜感激,如果在一天之内两次发表类似的帖子对用户来说很烦人,我深表歉意,但是当我试图了解如何做到这一点时,我确实感到很困惑。

谢谢!

编辑:这是一个示例代码,我根据注释中的建议尝试将其实现到我的代码中,该代码基于我从此处在线找到的代码: https://forum.unity.com/threads/making-random-range-generate-a-value-with-probability.336374/

    {
        while (again)

            {

            struct RandomSelection {
            public float probability;
                 List<int> scores = new List<int>();

                    Random generator = new Random();

                    for (int i = 0; i < 4; i++)

                 {

                    int score = generator.Next(

                    new RandomSelction(-1, 0, .01f),

                    new RandomSelction(0, 1, .3f),

                    new RandomSelction(1, 2, .58f),

                    new RandomSelction(2, 3, .1f),

                    new RandomSelction(3, 4, .01f)

                    );
                }


            int GetRandomValue(params RandomSelection[] selections)
            {
                float rand = Random.value;
                float currentProb = 0;
                foreach (var selection in selections)
                {
                    currentProb += selection.probability;
                    if (rand <= currentProb)
                        return selection.GetValue();
                }
                Console.WriteLine(score);

                scores.Add(score);

            }



            ConsoleKeyInfo keyPressed = Console.ReadKey();

            Console.Clear();

            if (keyPressed.Key != ConsoleKey.Spacebar)

            {

                break;

            }
        }
}

}

0 个答案:

没有答案