>  기사  >  Java  >  Java 난수 생성기가 다른 클래스에서 호출될 때 동일한 숫자를 반환하는 이유는 무엇입니까?

Java 난수 생성기가 다른 클래스에서 호출될 때 동일한 숫자를 반환하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-07 04:54:02934검색

Why does my Java random number generator return the same number when called from another class?

고정 시드가 있는 Java 난수 생성기

질문:

Java에서 설정 시 난수 생성기의 시드인데 다른 클래스에서 메서드를 호출하면 왜 항상 같은 숫자를 반환합니까?

코드:

public class Numbers {
    public int random(int i) {
        Random randnum = new Random();
        randnum.setSeed(123456789);
        return randnum.nextInt(i);
    }
}

호출할 때 number.random(10)을 여러 번 반복하면 일관되게 동일한 값이 출력됩니다. 시드 설정 요구 사항을 유지하면서 다른 난수를 생성하도록 코드를 어떻게 수정할 수 있습니까?

답변:

다른 난수가 생성되도록 하려면 임의 인스턴스는 메서드 호출마다 다시 생성되지 않고 전체 클래스에서 공유되어야 합니다. 이는 다음 수정을 통해 달성할 수 있습니다.

public class Numbers {
    private Random randnum;  // Declare the Random instance as a class variable

    public Numbers() {
        randnum = new Random();
        randnum.setSeed(123456789);
    }

    public int random(int i) {
        return randnum.nextInt(i);
    }
}

클래스 생성자에서 randnum 인스턴스를 초기화하고 클래스의 메서드를 통해 액세스할 수 있도록 함으로써 동일한 Random 객체가 클래스 전체에서 사용되도록 보장합니다. 각 메소드 호출마다 생성되는 다른 난수로 변경됩니다.

위 내용은 Java 난수 생성기가 다른 클래스에서 호출될 때 동일한 숫자를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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