0

我想生成 4 位随机数并将其作为某物的序列号放在文本框中。我该怎么做,但在某种程度上确保我不会得到重复的数字?

4

8 回答 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 回答