2010-10-16 39 views
0

我有一個問題找到一個很好的算法來生成一個隨機字母。我試着用這個:字母發生器

public static char GetLetter() 
    { 
     int num = random.Next(0, 26); 
     char letter = (char)('a' + num); 

     return letter; 
    } 

我在互聯網上發現,但它會產生相同的字母,或最多兩個。例如,如果我想填充用上面的代碼中隨機字母4x4矩陣,我得到:

C C C C 
C C C C 
C C G G 
G G G G 

對此事任何意見或建議?

回答

1

聽起來好像是在每次調用方法之前實例化random對象的新實例。

Randomtakes its seed from the system clock這個類的默認值,這意味着如果你連續創建幾個實例,它們將使用相同的種子,這意味着它們將生成相同的隨機數序列。

您應該創建Random類的單個實例,並在每次調用方法時重新使用同一個實例。

1

您幾乎可以肯定地創建大量Random的實例,而不是對所有調用使用相同的實例。很難肯定地說,因爲您尚未顯示如何使用該方法或宣佈random。我也懷疑這就是你使用的代碼,因爲它只會產生'a' - 'z',而不是'C'或'G'。

閱讀my article on random number generation瞭解更多細節,但基本思想是使用Random的一個實例。