我想生成4位数的随机数,并将其作为序列号放在文本框中。我该怎么办呢,但在某种程度上可以肯定我不会得到重复的数字?
答案 0 :(得分:2)
如果你想确定你没有重复,请使用 Guid
:
Guid guid = Guid.NewGuid(); // however a Guid is not a 4 digit integer
如果您想要随机数,请使用Random
:
Random rnd = new Random();
int randomInt = rnd.Next(1000, 10000)
但请注意,您不应在循环中创建随机实例,因为它是以当前时间播种的。否则你会得到重复的值。因此,将随机实例作为参数传递给此方法,使用字段/属性或在外部创建的循环中使用相同的实例。
获取唯一随机数的最简单方法是创建新数字(如果已经存在)。
答案 1 :(得分:1)
最好的方法是使用Random类:
Random random = new Random();
int result = random.Next(1000, 10000);
您还可以使用RNGCryptoServiceProvider
类,它为您提供更安全的随机数:
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] bytes = new byte[4];
csp.GetBytes(bytes);
int yourNum = bytes.Select(x => x % 10).Aggregate(0, (a, b) => (a * 10) + b);
答案 2 :(得分:1)
List<int> used = new List<int>();
Random random = new Random();
foreach(thing you want to do)
{
int current = random.Next(1000, 9999);
while(used.Contains(current))
current = random.Next(1000, 9999);
//do something
used.Add(current);
}
或类似的变体以满足您的需求
答案 3 :(得分:0)
Random类用于创建随机数。 (当然是伪随机的。)
示例:
Random rnd = new Random();
int num = rnd.Next(1000, 10000); //creates number from 1000 to 9999
您可以将HashSet用于商店生成的数字并检查重复
答案 4 :(得分:0)
最简单的方法是按顺序生成所有可能选项的列表并对其进行随机播放。然后在洗牌之后,只需按顺序浏览列表,序列将是随机的,不会重复。
List<int> numbers = new List<int>(Enumerable<int>.Range(0,10000);
HelperFunctions.Shuffle(numbers); //There are plenty of examples of how to shuffle the list on this site.
foreach(var number in numbers)
{
Console.WriteLine(number.ToString("D4"); //Displays random numbers from 0000 to 9999 but never repeats
}
答案 5 :(得分:0)
像这样:
var random = new Random();
var numbers = new List<int>(0);
for (var i = 0; i < 4; i++)
{
var number = random.Next(1000, 10000);
if (numbers.Contains(number))
{
i--;
continue;
}
numbers.Add(number);
}
tbx1.Text = numbers[0].ToString();
tbx2.Text = numbers[1].ToString();
tbx3.Text = numbers[2].ToString();
tbx4.Text = numbers[3].ToString();
答案 6 :(得分:0)
这将为您提供一个4位数的随机数。
Random random= new Random();
int RnNum = random.Next(1000,9999);
如果您想确保它不会重复,那么将生成的随机值存储在Session&amp;比较它是否已经生成。当然还有其他方法,如果你不想以会话的方式,写入文本文件或其他东西
答案 7 :(得分:0)
您需要自己记录在Dictionary或Hashset中生成的数字。像
HashSet<int> generatedValues = new HashSet<int>();
Random rnd = new Random();
int randomInt = rnd.Next(1000,9999);
while(generatedValues.Contains(randomInt))
{
randomInt = rnd.Next(1000,9999);
}
generatedValues.Add(randomint);