随机字符串生成器一致性问题
问题陈述:
随机字符串生成器正在展示意外行为,在多次调用时生成相同的四字符字符串。所需的功能是生成两个不同的随机字符串。
代码片段:
private string RandomString(int size) { StringBuilder builder = new StringBuilder(); Random random = new Random(); 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 类的新实例会导致不一致。这会导致每次调用使用相同的种子值,生成相同的序列。
解决方案:
为了确保真正的随机性,请将 Random 类的实例化移动到静态字段:
private static Random random = new Random((int)DateTime.Now.Ticks);
这确保在整个程序的生命周期中使用随机数生成器的单个实例。 DateTime.Now.Ticks 值充当唯一的种子,保证每次对 RandomString 的后续调用都会生成唯一的随机字符串。
修改后的代码:
private static Random random = new Random((int)DateTime.Now.Ticks); 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(); }
通过实施此更改,生成器现在将生成两个不同的随机数字符串:
// get 1st random string string Rand1 = RandomString(4); // get 2nd random string string Rand2 = RandomString(4); // creat full rand string string docNum = Rand1 + "-" + Rand2;
输出:
UNTE-FWNU
以上是为什么我的随机字符串生成器会生成相同的字符串,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!