我想生成 4 位随机数并将其作为某物的序列号放在文本框中。我该怎么做,但在某种程度上确保我不会得到重复的数字?
问问题
2946 次
8 回答
3
如果您想确保没有重复,请使用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)
但请注意,您不应在循环中创建随机实例,因为它是用当前时间播种的。否则你会得到重复的值。因此,要么将随机实例作为参数传递给此方法,要么使用字段/属性,要么在外部创建的循环中使用相同的实例。
获得唯一随机数的最简单方法是在已经存在的情况下创建新的数字。
于 2013-07-23T15:26:43.600 回答
2
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);
}
或对此进行一些类似的变体以满足您的需求
于 2013-07-23T15:29:39.643 回答
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);
于 2013-07-23T15:28:23.663 回答
0
Random 类用于创建随机数。(当然是伪随机的。)
例子:
Random rnd = new Random();
int num = rnd.Next(1000, 10000); //creates number from 1000 to 9999
您可以使用 HashSet 存储生成的数字并检查重复
于 2013-07-23T15:29:16.967 回答
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
}
于 2013-07-23T15:29:37.803 回答
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();
于 2013-07-23T15:29:49.040 回答
0
这将为您提供一个 4 位随机数。
Random random= new Random();
int RnNum = random.Next(1000,9999);
如果您想确保它不会重复,则将生成的随机值存储在 Session 中并比较它是否已经生成。当然还有其他方法,如果不想用session的方式,写到文本文件什么的
于 2013-07-23T15:30:00.927 回答
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);
于 2013-07-23T15:30:29.720 回答