我知道这是一个古老的东西,我在每个网站上都搜索了一个答案,然后才发布这个但我找不到解决方案
我正在使用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?
你能告诉我怎么做吗? 最好的祝福。答案 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()
- 快速连续重新创建它,因为每次都会为您提供相同的值。