生成随机数而不重复.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()); } } }