Boleh dikatakan bahawa dalam bahasa komputer semasa dan pengguna biasa, tidak ada cara untuk mendapatkan nombor rawak sebenar. Nombor rawak benar kini hanya tersedia dalam komputer kuantum.
Jadi nombor rawak yang kita bincangkan sekarang juga boleh dipanggil nombor pseudo-rawak ialah hasil yang diperoleh melalui algoritma dan digabungkan dengan nombor yang sentiasa berubah (seperti masa).
Kami memanggil data ini yang dikumpul melalui masa algoritma sebagai asas untuk mendapatkan nombor rawak pada mulanya sebagai benih.
Terdapat dua cara untuk mencipta nombor rawak dalam Java:
Yang pertama ialah mencipta objek Rawak terus
Random random = new Random();
Kaedah ini akan dipanggil di bahagian bawah untuk mendapatkan benih :
Cara kedua ialah lulus benih yang anda buat:
Random random = new Random(5);
Dalam kod sumber kita boleh secara langsung Ia dapat dilihat bahawa jenis data benih adalah panjang, iaitu integer panjang.
Jadi kita kini mempunyai cara untuk mendapatkan benih yang dihasilkannya apabila ia mula-mula menghasilkan objek Rawak, dan kemudian hantar benih yang diperolehi ke dalam objek yang mencipta Rawak. Adakah mungkin untuk mendapatkan nombor rawak yang sama seperti di atas?
Mula-mula gunakan bahasa java untuk melaksanakannya:
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"); } } }
Adalah jelas dari sini bahawa nombor rawak ini tidak rawak sama sekali. Selagi benih itu sama dua kali, hasil yang sama akan dikembalikan.
Di sini saya menggunakan bahasa python untuk melaksanakan fungsi ini sekali lagi (terutamanya kerana tiada kaedah dalam Java yang boleh memanggil output benih semasa). Gunakan python untuk mempunyai pemahaman yang lebih baik.
Saya akan menulis komen yang lebih terperinci dalam python, dan butirannya tidak sukar untuk difahami.
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')
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah benih dalam kelas Rawak Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!