2013-07-23 187 views
0

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

+1

你是什么意思的重复数字?在计算机上复制?在你的计划会议期间?世界各地的?防止4位数字重复并不容易... –

+2

0010是否被认为是符合您要求的4位随机数字? – Cemafor

+0

数字不能重复的范围是什么?就在当前的显示器上?在当前程序运行的所有显示中?对于程序的所有运行?对于所有计算机上的程序的所有运行?只是今天?明天怎么样 - 你能在几天之间重复吗? –

回答

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); 
} 

或这方面的一些相似的变化,以满足您的需求

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

'Guid's不是随机的。 –

+0

@newStackExchangeInstance他没有说他们在哪里,他说他们在哪里独一无二。 –

+6

我不认为Guid是一个“4位数的随机数字”。 –

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); 
0

Random类使用创建随机数字。 (伪随机那是当然的。)

例子:

Random rnd = new Random(); 
int num = rnd.Next(1000, 10000); //creates number from 1000 to 9999 

您可以使用HashSet的店面产生的数量,并检查复制

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 
} 
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(); 
0

这会给你一个4位数的随机数。

Random random= new Random(); 

int RnNum = random.Next(1000,9999); 

如果你想确保它不会被复制,然后存储在会话&产生的随机值进行比较,如果其已经产生。当然,还有其他的方法,如果你不想这样做会话的方式,写入文本文件或其他东西

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); 
+0

您可以使用['HashSet '](http://msdn.microsoft.com/en-us/library/bb359438.aspx)而不是'Dictionary' – Cemafor

+0

@Cemafor Yeah更新。 – Ehsan