我创建了一个简短的程序,在1-9之间创建3个随机整数并将它们存储在一个数组中,但是,我不希望它们中的任何一个重复,也就是说,我希望每个都是唯一的。除了必须遍历数组并将每个整数相互比较之外,是否有更简单的方法来生成3个唯一的整数?如果我将数组增加到超过3个整数,那似乎太乏味了。 这是我生成3个随机数的代码。我在Java中看到了其他代码,但我认为C#可能更容易,更有效。
var number = new Numbers[3];
Random r = new Random();
for ( int i = 0; i < number.Length; i++)
{
number[i] = new Numbers(r.Next(1,9));
}
Console.WriteLine("The Three Random Numbers Are:");
foreach(Numbers num in number)
{
Console.WriteLine("{0}", num.Number);
}
答案 0 :(得分:1)
我会做这样的事情:
var range = Enumerable.Range(1, 8);
var rnd = new Random();
var listInts = range.OrderBy(i => rnd.Next()).Take(3).ToList();
答案 1 :(得分:0)
您可以创建一个数组或可能生成的数字列表,例如0,1,2,3。然后,您生成一个从0到此列表长度的数字,例如2和选择列表[2]所以下次你的列表中只有0,1,3。 生成它需要更长的时间,特别是对于长列表,但它不会重复数字。
答案 2 :(得分:0)
using System;
using System.Collections.Generic;
public class Test
{
static Random random = new Random();
public static List<int> GenerateRandom(int count)
{
// generate count random values.
HashSet<int> candidates = new HashSet<int>();
// top will overflow to Int32.MinValue at the end of the loop
for (Int32 top = Int32.MaxValue - count + 1; top > 0; top++)
{
// May strike a duplicate.
if (!candidates.Add(random.Next(top))) {
candidates.Add(top);
}
}
// load them in to a list.
List<int> result = new List<int>();
result.AddRange(candidates);
// shuffle the results:
int i = result.Count;
while (i > 1)
{
i--;
int k = random.Next(i + 1);
int value = result[k];
result[k] = result[i];
result[i] = value;
}
return result;
}
public static void Main()
{
List<int> vals = GenerateRandom(10);
Console.WriteLine("Result: " + vals.Count);
vals.ForEach(Console.WriteLine);
}
}
从here
获得解释和答案