2016-10-10 47 views
2

我是新來的C#,我有一個代碼,調用相同的函數3次,返回一個隨機刺痛。出於某種原因,我的代碼始終返回相同的字符串。請幫忙。從返回隨機字符串的函數看到相同的結果

 public static String randomString() 
    { 
     String chars = "QWERTYUIOPASDFGHJKLZXCVBNM"; 
     Random rand = new Random(); 
     String finalstring = null; 

     for (int i = 0; i < 8; i++) 
     { 
      finalstring += chars[rand.Next(0, chars.Length - 1)]; 

     } 
     return finalstring; 

    } 

    public void SecondTest() 
    { 

     Console.WriteLine(Class1.randomString()); 
     Console.WriteLine(Class1.randomString()); 
     Console.WriteLine(Class1.randomString()); 

    } 

輸出樣本觀察: AXCFSDRG AXCFSDRG AXCFSDRG

+0

在主類中創建隨機。如果你仔細地創建它,它使用相同的種子,因此結果相同。在提問前也嘗試使用谷歌。 – deathismyfriend

回答

1

你構建三個獨立的隨機對象,而不是重複使用一個單一的隨機對象(這將是更好的做法)。

隨機對象,如果您沒有提供種子,則用當前時間播種。在這種情況下,您的randomString()方法返回的速度非常快,以至於所有三個Random對象都獲得相同的種子,從而獲得相同的輸出序列。

1

基於此SO Answer

每次您執行新的Random()函數時,都會使用該時鐘進行初始化。這個 意味着在一個緊密的循環中你可以獲得相同的價值。您 應該保持單個隨機實例,並在同一個 實例上繼續使用Next。

//Function to get random number 
private static readonly Random random = new Random(); 
private static readonly object syncLock = new object(); 
public static int RandomNumber(int min, int max) 
{ 
    lock(syncLock) { // synchronize 
     return random.Next(min, max); 
    } 
} 
+1

VTC複製比複製粘貼現有答案更合適。 –

-1

使用RNGCryptoServiceProvider類:

https://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider(v=vs.110).aspx

RNGCryptoServiceProvider: generate random numbers in the range [0, randomMax)

如果您在回答使用擴展方法如下:

public static String randomString() 
    { 
     String chars = "QWERTYUIOPASDFGHJKLZXCVBNM"; 
     Random rand = new Random(); 
     String finalstring = null; 

     for (int i = 0; i < 8; i++) 
     { 
      finalstring += chars[GenerateRandomNumber(8)]; 

     } 
     return finalstring; 

    } 

    public static int GenerateRandomNumber(int length) 
    { 
     using (var randomNumberGenerator = new RNGCryptoServiceProvider()) 
     { 
      return randomNumberGenerator.GetNextInt32(length); 
     } 
    } 

結果每次都會有所不同。

相關問題