>  기사  >  Java  >  Java Random 클래스의 시드 문제를 해결하는 방법

Java Random 클래스의 시드 문제를 해결하는 방법

王林
王林앞으로
2023-05-03 19:37:041451검색

현재 컴퓨터 언어와 일반 사용자에서는 진정한 난수를 얻을 수 있는 방법이 없다고 할 수 있습니다. 이제 진정한 난수는 양자 컴퓨터에서만 사용할 수 있습니다.

그래서 우리가 지금 이야기하고 있는 난수는 의사 난수라고도 할 수 있습니다. 의사 난수는 알고리즘을 통해 얻은 결과이며 다음으로 정기적으로 변하는 숫자(예: 시간)와 결합됩니다.

처음에 난수를 시드로 얻기 위한 기반으로 알고리즘 시간을 통해 수집되는 이런 종류의 데이터를 우리는 호출합니다.

Java에서 난수를 생성하는 방법에는 두 가지가 있습니다.

첫 번째는 Random 개체를 직접 생성하는 것입니다.

Random random = new Random();

이 메서드는 시드를 가져오기 위해 맨 아래에서 호출됩니다.

Java Random 클래스의 시드 문제를 해결하는 방법

두 번째는 추가하는 것입니다. 자신 생성된 시드를 다음 경로에 전달하세요.

Random random = new Random(5);

Java Random 클래스의 시드 문제를 해결하는 방법

소스 코드에서 시드의 데이터 유형이 long, 즉 긴 정수임을 직접 확인할 수 있습니다.

이제 우리는 Random 개체를 처음 생성할 때 생성된 시드를 가져온 다음, 얻은 시드를 Random을 생성한 개체에 전달할 수 있는 방법을 갖게 되었습니다. 위와 같은 난수를 얻을 수 있나요?

먼저 Java 언어를 사용하여 구현하세요.

import java.util.Random;

public class Demo02 {
    public static void main(String[] args) {
        Random random = new Random(5);//在这将5作为种子传入
        System.out.println("第一次调用:");
        for (int i = 0; i < 5; i++) {
            System.out.print(random.nextInt(10) + "\t");
            //获得10以内的随机数(不包括10)
        }
        random.setSeed(5);//在这再将种子5传入Random的种子当中
        System.out.println("\n第二次调用:");
        for (int i = 0; i < 5; i++) {
            System.out.print(random.nextInt(10) + "\t");
        }
    }
}

Java Random 클래스의 시드 문제를 해결하는 방법

여기서 이 난수가 전혀 무작위가 아니라는 것이 분명해졌습니다. 시드가 두 번 동일하면 동일한 결과가 반환됩니다.

여기서는 Python 언어를 사용하여 이 함수를 다시 구현합니다(주로 Java에는 현재 시드의 출력을 호출할 수 있는 메서드가 없기 때문입니다). 더 잘 이해하려면 Python을 사용하십시오.

자세한 설명은 Python으로 작성해서 이해하기 어렵지 않을 것입니다.

import random  #导入random内库
x = random.getstate()  # 获得当前random里的种子
print(&#39;第一次循环:&#39;) #输入语句
for i in range(5):
    #for循环  for i in range(5)  ===》 for (int i = 0; i < 5; i++)
    #在python里面并没哟什么大括号去吧什么括起来,而是要注意锁定,一个锁定就是一个整体
    print(random.randint(1, 10), end=&#39;\t&#39;)
    #random.randint(1, 10)生成1~10(不包括10)的随机数,
    # end=&#39;\t&#39;表示当前print没有结束,还有一个制表符的键位,也就不换行了
print(&#39;\n第二次循环&#39;)
random.setstate(x)#将上面获得的种子再次传入进去
for i in range(5): #这里和上面一样,循环出5次
    print(random.randint(1, 10), end=&#39;\t&#39;)

Java Random 클래스의 시드 문제를 해결하는 방법

위 내용은 Java Random 클래스의 시드 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제