Java 난수 생성기: Set Seed를 사용하면 왜 항상 동일한 출력이 나오는가?
Java에서 난수 생성을 위해 Random 클래스를 활용할 때 , 시드 설정으로 일관되게 동일한 출력이 생성되는 상황이 발생하는 것은 드문 일이 아닙니다. 문제를 자세히 조사하고 효과적인 솔루션을 살펴보겠습니다.
다음 코드 조각을 고려하세요.
public int random(int i){ Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); }
다른 클래스에서 여러 번 호출되는 경우 이 메서드는 이상적으로는 고유한 난수를 제공해야 합니다. 그러나 숫자.random(10)을 사용하여 호출하면 "5"와 같은 동일한 결과가 일관되게 반환됩니다.
이 동작의 원인은 무작위 메소드 내에서 새로운 Random 인스턴스를 생성하는 데 있습니다. 각각의 새 인스턴스는 서로 다른 시드 생성기를 사용하므로 예측 가능한 숫자 시퀀스가 생성됩니다. 이 문제를 해결하려면 Random 인스턴스를 전체 클래스에서 공유해야 합니다.
public class Numbers { Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i){ return randnum.nextInt(i); } }
이제 공유 Random 인스턴스를 사용하면 Random 메서드를 여러 번 호출하면 설정된 시드를 사용하더라도 진정한 난수를 생성할 수 있습니다. . 시드는 난수 생성기의 시작점 역할을 하여 의도된 임의성 요소를 계속 유지하면서 여러 실행에서 일관성을 보장합니다.
위 내용은 시드를 설정할 때 Java 난수 생성기가 항상 동일한 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!