Rumah >pembangunan bahagian belakang >C++ >Mengapa penjana nombor rawak saya menghasilkan nombor yang sama berulang kali?
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:
<code class="language-csharp">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); }</code>Debugging mungkin menunjukkan nilai -nilai yang berbeza -beza semasa setiap lelaran gelung. Walau bagaimanapun, menetapkan titik putus selepas gelung mendedahkan bahawa semua elemen dalam array
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
<code class="language-csharp">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); }</code>
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!