Memahami dan menetapkan nombor rawak berulang dalam pengaturcaraan
Masalah pengaturcaraan yang kerap melibatkan penjana nombor rawak (RNGs) berulang kali mengeluarkan nombor yang sama. Ini biasanya berlaku apabila RNG dimulakan semula beberapa kali dalam gelung, membuat contoh baru. Random
Masalah dijelaskan
mari kita periksa isu ini dengan contoh:
public static int RandomNumber(int min, int max) { Random random = new Random(); // Problem: New instance each time return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }
memegang nilai yang sama. mac
Penyelesaian: Satu contoh rawak tunggal
Sebab akar membuat objek baru dalam gelung. Oleh kerana Random
sering menggunakan jam sistem untuk pembenihan, mewujudkan pelbagai contoh dalam penggantian cepat membawa kepada nilai benih yang sama dan dengan itu, nombor berulang. Random
di seluruh kod anda: Random
private static readonly Random random = new Random(); public static int RandomNumber(int min, int max) { return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }
Multithreading and Thread Safety
Dalam aplikasi multithreaded, mengakses contoh yang dikongsi memerlukan penyegerakan untuk mencegah keadaan kaum. Ini dapat dicapai menggunakan kunci: Random
Atas ialah kandungan terperinci Mengapa penjana nombor rawak saya menghasilkan nombor yang sama berulang kali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!