随机生成问题

本文关键字:成问题 随机 | 更新日期: 2023-09-27 17:58:07

我知道这是一件很古老的事情,在发布之前,我已经像每个网站一样搜索了答案,但我找不到解决方案

我正在使用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)];
    }

我的问题是,当我想在一个字符数组中导航时并在此阵列中的每一个上执行先前的功能

我选择了同样的选项,但它没有被随机选择?

你能告诉我怎么做吗?顺致敬意,

随机生成问题

删除rand = new Random();行,您将创建两次相同的对象。CCD_ 2足以生成新的随机数。还要确保您的上限是"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.
}

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

A你应该根据数组的实际长度来调整你的选择范围,而不是硬编码到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)];
        }
    }
}

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

摆脱

 rand = new Random();

删除rand = new Random()-按照原样快速连续地重新创建它,使它每次都为您提供相同的值。