Walaupun menetapkan benih kelas Rawak dengan nilai tertentu, penjana nombor rawak secara konsisten mengembalikan nombor yang sama. Mari kita terokai perkara yang boleh menyebabkan isu ini.
Kelas Rawak Java direka bentuk untuk menjana nombor rawak pseudo. Secara lalai, ia menggunakan jam dalamannya sebagai nilai benih, menyebabkan ia menjana urutan nombor yang agak boleh diramal. Untuk menyesuaikan jujukan, anda boleh menetapkan benih secara eksplisit menggunakan kaedah setSeed().
Benih ialah nilai berangka yang digunakan untuk memulakan keadaan dalaman penjana nombor rawak. Keadaan ini menentukan urutan nombor yang dijana.
Dalam kod yang disediakan, anda sedang mencipta tika baharu Rawak dalam kaedah rawak(). Ini bermakna setiap kali anda memanggil rawak(), benih baharu sedang ditetapkan, dengan berkesan mengatasi nilai benih yang ditetapkan sebelumnya.
Untuk menyelesaikan isu ini, anda perlu berkongsi tika Rawak merentas seluruh kelas. Dengan mencipta satu contoh dan menetapkan benih sekali apabila kelas dimulakan, anda memastikan urutan nombor yang sama dijana secara konsisten.
Kod dikemas kini berikut menyelesaikan isu:
public class Numbers { private Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i) { return randnum.nextInt(i); } }
Dalam kod yang dikemas kini ini:
Dengan membuat perubahan ini, anda kini akan memperoleh nombor rawak yang berbeza apabila memanggil rawak() daripada yang berbeza bahagian program anda, sambil tetap menghormati nilai benih yang ditentukan.
Atas ialah kandungan terperinci Mengapa Menetapkan Benih dalam Kelas Rawak Java Mengembalikan Nombor yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!