임의 문자열 생성기 일관성 문제
문제 설명:
임의 문자열 생성기가 표시됩니다. 예상치 못한 동작으로 인해 여러 번 호출하면 동일한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!