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
Lepaskan: 2025-02-03 08:32:09
asal
1050 orang telah melayarinya

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:

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);
}
Salin selepas log masuk
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

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);
}
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan