随机生成问题

时间:2011-05-29 16:35:25

标签: c# random

我知道这是一个古老的东西,我在每个网站上都搜索了一个答案,然后才发布这个但我找不到解决方案

我正在使用C# - Windows窗体

我有这个代码:

char[] options = { 'a', 'l', 'w' };

我也有这个功能:

static Random rand = new Random();
    static char OptionPicker(char[] options)
    {
        rand = new Random();
        return options[rand.Next(0, 2)];
    }

我的问题是,当我想浏览一系列字符时 并在每个数组上执行上一个函数

我选择了相同的选项并且没有得到randomed?

你能告诉我怎么做吗? 最好的祝福。

4 个答案:

答案 0 :(得分:5)

删除rand = new Random();行,您要创建两次相同的对象。 rand.Next(0, 3)足以生成新的随机数。还要确保你的上限是'3'而不是'2',因为它是独占的。

static Random rand = new Random();
static char OptionPicker(char[] options)
{
    return options[rand.Next(0, 3)]; // 3 is exclusive so results will be 0,1,2 only.
}

答案 1 :(得分:2)

有几件事。您需要每次都不重新创建Random对象,或者使用不同的种子值重新创建它(在我的示例中,我只创建一次并将种子值绑定到当前时间/毫秒。)

你应该根据数组的实际长度选择你的选择范围,而不是硬编码为2 ..

试试这个:(在控制台应用中)

namespace SO_Console_test
{
    class Program
    {
        static void Main(string[] args)
        {
            char[] options = { 'a', 'l', 'w' };
            Random rand = new Random(DateTime.Now.Millisecond);

            for (int i = 0; i <= 100; i++)
            {
                Console.WriteLine(OptionPicker(options,rand).ToString());
            }
            Console.ReadLine();
        }


        public static char OptionPicker(char[] options, Random rand)
        {
            return options[rand.Next(0, options.Length)];
        }

    }
}

答案 2 :(得分:0)

每次都不要创建新的Random对象。

摆脱

 rand = new Random();

答案 3 :(得分:0)

删除rand = new Random() - 快速连续重新创建它,因为每次都会为您提供相同的值。