Penjana Nombor Rawak Java dengan Benih Tetap
Soalan:
Di Java, apabila menetapkan benih untuk penjana nombor rawak, mengapa ia sentiasa mengembalikan nombor yang sama apabila saya memanggil kaedah dari kelas lain?
Kod:
public class Numbers { public int random(int i) { Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); } }
Apabila memanggil numbers.random(10) beberapa kali, ia secara konsisten menghasilkan nilai yang sama. Bagaimanakah kita boleh mengubah suai kod untuk menghasilkan nombor rawak yang berbeza sambil mengekalkan keperluan untuk menetapkan benih?
Jawapan:
Untuk memastikan nombor rawak yang berbeza dijana, Contoh rawak mesti dikongsi di seluruh kelas dan bukannya dicipta semula untuk setiap panggilan kaedah. Ini boleh dicapai melalui pengubahsuaian berikut:
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); } }
Dengan memulakan tika randnum dalam pembina kelas dan menjadikannya boleh diakses melalui kaedah kelas, kami memastikan objek Rawak yang sama digunakan di seluruh kelas, mendahului kepada nombor rawak berbeza yang dijana dengan setiap panggilan kaedah.
Atas ialah kandungan terperinci Mengapakah penjana nombor rawak Java saya mengembalikan nombor yang sama apabila dipanggil dari kelas lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!