生成随机数而不重复.C#
大家好我想尝试在c#的同一行生成6个不同的数字,但我遇到的问题是一些数字在同一行重复。这是我的代码
List listNumbers = new List(); int numbers = rand.Next(1,49); for (int i= 0 ; i < 6 ;i++) { listNumbers.Add(numbers); numbers = rand.Next(1,49); }
某处我的输出是
17 23 23 31 33 48
检查您针对之前的数字生成的每个数字:
List listNumbers = new List (); int number; for (int i = 0; i < 6; i++) { do { number = rand.Next(1, 49); } while (listNumbers.Contains(number)); listNumbers.Add(number); }
另一种方法是创建可能的数字列表,并删除从列表中选择的数字:
List possible = Enumerable.Range(1, 48).ToList(); List listNumbers = new List (); for (int i = 0; i < 6; i++) { int index = rand.Next(0, possible.Count); listNumbers.Add(possible[index]); possible.RemoveAt(index); }
listNumbers.AddRange(Enumerable.Range(1, 48) .OrderBy(i => rand.Next()) .Take(6))
使它成为一个while循环并将整数添加到hashset。 当你有六个整数时停止循环。
你所做的是每次在循环中生成一个随机数。 当然,下一个随机数可能与前一个随机数相同。 只需添加一个检查,序列中不存在当前随机数。 您可以使用while循环,如:while(currentRandom not in listNumbers):generateNewRandomNumber
您应该使用HashSet,而不是使用List。 HashSet <>禁止多个相同的值。 并且Add方法返回一个bool,指示元素是否已添加到列表中,请在下面找到示例代码。
public static IEnumerable GetRandomNumbers(int count) { HashSet randomNumbers = new HashSet (); for (int i = 0; i < count; i++) while (!randomNumbers.Add(random.Next())); return randomNumbers; }
此类任务的最佳方法(CPU时间)是创建一个包含所有可能数字的数组,并从中删除刚从数组中取出的项目。 例:
const int min = 1, max = 49; List listNumbers = new List (); int[] numbers = new int[max - min + 1]; int i, len = max - min + 1, number; for (i = min; i < max; i++) numbers[i - min] = i; for (i = 0; i < 6; i++) { number = rand.Next(0, len - 1); listNumbers.Add(numbers[number]); if (number != (len - 1)) numbers[number] = numbers[len - 1]; len--; }
我已经用do … while循环切换你的for循环,并将列表上的停止条件设置为小于6.这可能不是最佳解决方案,但它最接近原始代码。
List listNumbers = new List (); do { int numbers = rand.Next(1,49); if(!listNumbers.Contains(number)) { listNumbers.Add(numbers); } } while (listNumbers.Count < 6)
将下面的内容粘贴到类中作为新方法
public int randomNumber() { var random = new Random(); int randomNumber = random.Next(10000, 99999); return randomNumber; }
并在任何需要的地方使用以下任何地方进行测试
var RandNum = randomNumber();
driver.FindElement(By.CssSelector(“[class =’test’]”))。SendKeys( RandNum );
创建一个HashSet并生成一个唯一的随机数
public List GetRandomNumber(int from,int to,int numberOfElement) { var random = new Random(); HashSet numbers = new HashSet (); while (numbers.Count < numberOfElement) { numbers.Add(random.Next(from, to)); } return numbers.ToList(); }
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int[] que = new int[6]; int x, y, z; Random ran = new Random(); for ( x = 0; x < 6; x++) { que[x] = ran.Next(1,49); for (y = x; y >= 0; y--) { if (x == y) { continue; } if (que[x] == que[y]) { que[x] = ran.Next(1,49); y = x; } } } listBox1.Items.Clear(); for (z = 0; z < 6**strong text**; z++) { listBox1.Items.Add(que[z].ToString()); } } }