>백엔드 개발 >C++ >내 무작위 문자열 생성기가 동일한 문자열을 생성하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

내 무작위 문자열 생성기가 동일한 문자열을 생성하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-05 16:45:44564검색

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

임의 문자열 생성기 일관성 문제

문제 설명:

임의 문자열 생성기가 표시됩니다. 예상치 못한 동작으로 인해 여러 번 호출하면 동일한 4자리 문자열이 생성됩니다. 원하는 기능은 두 개의 서로 다른 임의 문자열을 생성하는 것입니다.

코드 조각:

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으로 문의하세요.