随机字符串生成器一致性问题
问题:
随机字符串生成器无法尽管被多次调用,但仍会产生不同的字符串。相反,它会重复生成相同的随机字符串。
代码:
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中文网其他相关文章!