2010-05-31 207 views
8

我想生成25個唯一的隨機數並在控制檯中列出它們。這些數字應該至少有10個字符。任何簡單的方法來做到這一點?生成多個隨機數

+1

按字符我猜你是指十進制數字? – 2010-05-31 09:12:58

+0

是的,他們也可以是字母數字字符..沒有guid的請 – Jasl 2010-05-31 09:14:56

+1

字母數字!=隨機數字。你想要隨機字符串 – RvdK 2010-05-31 09:16:28

回答

13

嘗試了建設的數字字符串,並使用一個HashSet,以確保它們是唯一的:

Random random = new Random(); 
HashSet<string> ids = new HashSet<string>(); 

while (ids.Count < 25) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < 10; ++i) 
    { 
     sb.Append(random.Next(10)); 
    } 
    ids.Add(sb.ToString()); 
} 

輸出示例:

 
7895499338 
2643703497 
0126762624 
8623017810 
...etc... 

HashSet存在於.NET 3.5和更新。

2

問題出在「25 unique random」。顯示25個隨機數很容易

Random r = new Random(); 
for(int i=0; i<25; i++) 
    Console.WriteLine(r.Next(1,100).ToString()); 

雖然這些不一定是唯一的。如果您不想允許重複,則需要以某種方式存儲先前生成的數字,如果您擊中舊數字,則需要再次滾動。

請注意您以這種方式更改生成的數字的概率分佈。

編輯:我剛剛注意到這些數字應該是十個字符長。由於9,999,999,999超過Int32.MaxValue,我建議使用Math.Floor(r.NextDouble() * 10000000000 + 1000000000)而不是r.Next(1,100)

由於您的號碼很長,您不必擔心重複。他們是非常不可能的。

+0

'999 999 999'不超過'int.MaxValue'。然而,將r.Next()乘以十億。 – IVlad 2010-05-31 09:30:42

+0

@IVlad:我打算寫10'9。 'r.Next()'返回一個double而不是int,這就是我使用它的原因。 – Jens 2010-05-31 09:38:47

+0

否,'r.Next()'返回一個int。你想'r.NextDouble()',即使如此,你也是過於複雜的事情。 – IVlad 2010-05-31 09:40:35

-2
Random rnd = new Random(table); 
for(int i = 0; i < 25; ++i) { 
    Console.WriteLine("{0}", rnd.Next(50, 50+i) 
} 
+1

不保證是唯一的。 – crazyscot 2010-05-31 09:16:42

+0

你可以在數字計算機上提供一種保證技術。我的意思是100%? – 2010-06-09 21:15:27

0

一個簡單的方法是這樣的:

class Test 
{ 
    private static void Main() 
    { 
     Random rand = new Random(); 

     for (int i = 0; i < 25; ++i) 
     { 
      Console.WriteLine(rand.Next(1000000000, int.MaxValue)); 
     } 
    } 
} 

這將確保數字總是10個字符(數字)長。但它們不一定是唯一的。如果你想他們肯定是獨一無二的,你必須做這樣的事情:

class Test 
{ 
    private static void Main() 
    { 
     Random rand = new Random(); 

     var generatedSoFar = new HashSet<int>(); 
     for (int i = 0; i < 25; ++i) 
     { 
      int newRand; 
      do 
      { 
       newRand = rand.Next(1000000000, int.MaxValue); 
      } while (generatedSoFar.Contains(newRand)); // generate a new random number until we get to one we haven't generated before 

      generatedSoFar.Add(newRand); 

      Console.WriteLine(newRand); 
     } 
    } 
} 

如果你希望能夠有超過十個位數,你隨機產生10之間的數字位數您最大數字位數。然後在StringBuilderList中隨機生成每個數字(或一組數字)。您可以使用上面使用的相同的HashSet方法來確保唯一性。

1

隨機性和唯一性有很大的不同。

所以,如果你真的需要獨特號碼,你必須確保你保存的地方都已經創建了數字和檢查,如果新創建一個不在此列表中,或者您必須提供一些算法,確保了給定的數字不能創建兩次。

爲了讓第二部分工作,您大多需要創建時刻的日期/時間,導致當前日期/時間對永遠是唯一的。唯一的問題是您每秒(毫秒)有多少個創作,以及有多少位可用於存儲您的唯一編號。

關於使用12位數的示例is made here。希望這可以幫助。