> Java > java지도 시간 > Java의 Random 클래스에서 시드 설정이 동일한 숫자를 반환하는 이유는 무엇입니까?

Java의 Random 클래스에서 시드 설정이 동일한 숫자를 반환하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-06 14:21:03
원래의
1045명이 탐색했습니다.

Why Does Setting the Seed in Java's Random Class Return the Same Number?

Java 난수 생성: 왜 시드 설정이 같은 숫자를 반환합니까?

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);
    }
}
로그인 후 복사

이 업데이트된 코드에서는:

  1. randnum이라는 비공개 필드가 공유 Random 인스턴스를 나타내기 위해 선언되었습니다.
  2. Random 인스턴스가 생성되고 시드는 생성자 내에서 설정되어 클래스 객체가 생성될 때 시드가 한 번만 초기화되도록 합니다.

이러한 변경을 수행하면 이제 다른 개체에서 random()을 호출할 때 다른 난수를 얻을 수 있습니다. 지정된 시드 값을 계속 존중하면서 프로그램의 일부를 유지합니다.

위 내용은 Java의 Random 클래스에서 시드 설정이 동일한 숫자를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿