현재 컴퓨터 언어와 일반 사용자에서는 진정한 난수를 얻을 수 있는 방법이 없다고 할 수 있습니다. 이제 진정한 난수는 양자 컴퓨터에서만 사용할 수 있습니다.
그래서 우리가 지금 이야기하고 있는 난수는 의사 난수라고도 할 수 있습니다. 의사 난수는 알고리즘을 통해 얻은 결과이며 다음으로 정기적으로 변하는 숫자(예: 시간)와 결합됩니다.
처음에 난수를 시드로 얻기 위한 기반으로 알고리즘 시간을 통해 수집되는 이런 종류의 데이터를 우리는 호출합니다.
Java에서 난수를 생성하는 방법에는 두 가지가 있습니다.
첫 번째는 Random 개체를 직접 생성하는 것입니다.
Random random = new Random();
이 메서드는 시드를 가져오기 위해 맨 아래에서 호출됩니다.
두 번째는 추가하는 것입니다. 자신 생성된 시드를 다음 경로에 전달하세요.
Random random = new Random(5);
소스 코드에서 시드의 데이터 유형이 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"); } } }
여기서 이 난수가 전혀 무작위가 아니라는 것이 분명해졌습니다. 시드가 두 번 동일하면 동일한 결과가 반환됩니다.
여기서는 Python 언어를 사용하여 이 함수를 다시 구현합니다(주로 Java에는 현재 시드의 출력을 호출할 수 있는 메서드가 없기 때문입니다). 더 잘 이해하려면 Python을 사용하십시오.
자세한 설명은 Python으로 작성해서 이해하기 어렵지 않을 것입니다.
import random #导入random内库 x = random.getstate() # 获得当前random里的种子 print('第一次循环:') #输入语句 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='\t') #random.randint(1, 10)生成1~10(不包括10)的随机数, # end='\t'表示当前print没有结束,还有一个制表符的键位,也就不换行了 print('\n第二次循环') random.setstate(x)#将上面获得的种子再次传入进去 for i in range(5): #这里和上面一样,循环出5次 print(random.randint(1, 10), end='\t')
위 내용은 Java Random 클래스의 시드 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!