>  기사  >  Java  >  시드를 설정할 때 Java 난수 생성기가 항상 동일한 출력을 생성하는 이유는 무엇입니까?

시드를 설정할 때 Java 난수 생성기가 항상 동일한 출력을 생성하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-07 11:58:02796검색

Why Does My Java Random Number Generator Always Produce the Same Output When I Set a Seed?

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

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