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

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

Barbara Streisand
发布: 2025-01-05 16:45:44
原创
589 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板