Rumah >pembangunan bahagian belakang >C++ >Mengapa penjana nombor rawak saya menghasilkan nombor yang sama berulang kali?

Mengapa penjana nombor rawak saya menghasilkan nombor yang sama berulang kali?

DDD
DDDasal
2025-02-03 08:32:091131semak imbas

Why Does My Random Number Generator Produce the Same Number Repeatedly?

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

Penyelesaiannya adalah mudah: Gunakan satu contoh statik

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn