隨機字串產生器一致性問題
問題:
隨機字串產生器無法儘管被多次調用,但仍會產生不同的字串。相反,它會重複產生相同的隨機字串。
程式碼:
private string RandomString(int size) { StringBuilder builder = new StringBuilder(); Random random = new Random(); // Random object created each time char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } return builder.ToString(); }
原因:
問題在於在 RandomString 方法中建立新的 Random 物件。這每次都會使用相同的種子初始化隨機數產生器,從而產生相同的隨機數序列,並最終產生相同的隨機字串。
解:
為了確保兩個不同的隨機字串,應該在 RandomString 方法外部建立 Random 物件並將其設為靜態。這可確保在應用程式的整個生命週期中使用相同的種子,從而在每次呼叫時產生一致的隨機數序列和不同的字串。
修改後的程式碼:
private static Random random = new Random((int)DateTime.Now.Ticks); // Random object created outside method private string RandomString(int size) { StringBuilder builder = new StringBuilder(); char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } return builder.ToString(); }
以上是為什麼我的隨機字串產生器會不斷產生相同的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!