>백엔드 개발 >C++ >내 무작위 문자열 생성기가 계속해서 동일한 문자열을 생성하는 이유는 무엇입니까?

내 무작위 문자열 생성기가 계속해서 동일한 문자열을 생성하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-05 22:41:38573검색

Why Does My Random String Generator Keep Producing the Same String?

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

문제:

임의 문자열 생성기가 실패합니다. 여러 번 호출되었음에도 불구하고 고유한 문자열을 생성합니다. 대신 동일한 무작위 문자열을 반복적으로 생성합니다.

코드:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.