Random 클래스의 시드를 특정 값으로 설정했음에도 불구하고 난수 생성기는 지속적으로 같은 숫자를 반환합니다. 이 문제의 원인이 무엇인지 살펴보겠습니다.
Java Random 클래스는 의사 난수를 생성하도록 설계되었습니다. 기본적으로 내부 시계를 시드 값으로 사용하여 상대적으로 예측 가능한 일련의 숫자를 생성합니다. 시퀀스를 사용자 정의하려면 setSeed() 메서드를 사용하여 시드를 명시적으로 설정할 수 있습니다.
시드는 난수 생성기의 내부 상태를 초기화하는 데 사용되는 숫자 값입니다. 이 상태에 따라 생성되는 숫자의 순서가 결정됩니다.
제공된 코드에서는 random() 메서드 내에서 Random의 새 인스턴스를 생성합니다. 즉, random()을 호출할 때마다 새 시드가 설정되어 이전에 설정된 시드 값을 효과적으로 재정의합니다.
이 문제를 해결하려면 전체 클래스에서 Random 인스턴스를 공유해야 합니다. 단일 인스턴스를 생성하고 클래스가 초기화될 때 시드를 한 번 설정하면 동일한 숫자 시퀀스가 일관되게 생성되도록 할 수 있습니다.
다음 업데이트된 코드는 문제를 해결합니다.
public class Numbers { private Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i) { return randnum.nextInt(i); } }
이 업데이트된 코드에서는:
이러한 변경을 수행하면 이제 다른 개체에서 random()을 호출할 때 다른 난수를 얻을 수 있습니다. 지정된 시드 값을 계속 존중하면서 프로그램의 일부를 유지합니다.
위 내용은 Java의 Random 클래스에서 시드 설정이 동일한 숫자를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!