我有一个字符串数组,我想从列表中随机选择一个变量。虽然我使用随机功能,但我想知道它是否会选择零值? (我的数组中的元素为零)
string randomString = a[new Random().Next(a.Length)];
答案 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()