2013-07-23 234 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