首页 >后端开发 >C++ >为什么我的随机字符串生成器会生成相同的字符串,如何修复它?

为什么我的随机字符串生成器会生成相同的字符串,如何修复它?

Barbara Streisand
Barbara Streisand原创
2025-01-05 16:45:44589浏览

Why Does My Random String Generator Produce Identical Strings, and How Can I Fix It?

随机字符串生成器一致性问题

问题陈述:

随机字符串生成器正在展示意外行为,在多次调用时生成相同的四字符字符串。所需的功能是生成两个不同的随机字符串。

代码片段:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn