随机类中的随机函数如何生成整数?

时间:2014-02-03 13:28:59

标签: c# arrays

我有一个字符串数组,我想从列表中随机选择一个变量。虽然我使用随机功能,但我想知道它是否会选择零值? (我的数组中的元素为零)

string randomString = a[new Random().Next(a.Length)]; 

3 个答案:

答案 0 :(得分:3)

随机应该是随机的,因此获得A应该是随机的

有一点需要注意的是,如果你正在打电话

string randomString = a[new Random().Next(a.Length)];

快速连续,例如在循环中,然后创建一个类字段,否则Next()将是相同的。

private Random _random = new Random();

然后在你的函数调用中

string randomString = a[_random.Next(a.Length)];

答案 1 :(得分:2)

Random类只使用伪随机数生成为您提供符合您规范的数字,似乎随机。你的代码很好,但是(理论上)26个可能的结果,得到其中一个不应该经常发生。

我相信您遇到的问题是您在循环中创建新的Random对象,并且它们最终会使用相同的种子,尝试在您的类中声明它:

Random rnd = new Random();

并像这样使用它:

string randomString = a[rnd.Next(a.Length)];

使用它(与当前方法相反)的好处是,如果你在循环中运行它,你不会冒险连续多次获得相同的答案。

希望这有所帮助,欢呼!

〜Winderps

答案 2 :(得分:1)

你怎么能说很少?

试试这个:

        String[] myArray = new String[] { "A", "B", "C" };

        Random rd = new Random();

        Int32 aCounter = 0;
        Int32 bCounter = 0;
        Int32 cCounter = 0;

        for (int i = 0; i < 25000; i++)
        {
            Int32 retVal = rd.Next(myArray.Length);
            switch (retVal)
            {
                case 0:
                    aCounter++;
                    break;
                case 1:
                    bCounter++;
                    break;
                case 2:
                    cCounter++;
                    break;
            }
        }

正如我的测试所预期的那样,正如预期的那样,aCounter,bCounter和cCounter在8000和8500之间总是具有相同的值。

Perah你调用了你的新Random()。Next()太快使用单个对象Random并每次在同一个对象上调用Next()