Rumah > pembangunan bahagian belakang > C++ > Mengapa penjana nombor rawak saya hanya menghasilkan satu nombor unik?

Mengapa penjana nombor rawak saya hanya menghasilkan satu nombor unik?

Barbara Streisand
Lepaskan: 2025-02-03 08:31:09
asal
594 orang telah melayarinya

Why Does My Random Number Generator Only Produce One Unique Number?

Menyelesaikan masalah penjana nombor rawak yang menghasilkan nombor berulang

Penjana Nombor Rawak anda (RNG) nampaknya hanya menjana satu nombor unik walaupun menggunakan gelung. Debugging mendedahkan nombor yang berbeza semasa pelaksanaan gelung, tetapi setelah selesai, semua elemen array memegang nilai yang sama.

Masalahnya berpunca daripada membuat contoh

baru dalam setiap lelaran gelung. Oleh kerana Random sering disukai menggunakan jam sistem, gelung yang dilaksanakan dengan cepat boleh berulang kali memulakan objek Random dengan benih yang sama, yang membawa kepada output yang sama. Random

Penyelesaian: Satu contoh yang dikongsi bersama

Pembetulan melibatkan menggunakan satu, statik

contoh di semua panggilan. Ini memastikan kemas kini keadaan yang konsisten dan menghalang nilai benih berulang. Untuk mengendalikan senario pelbagai threaded dengan selamat, kunci digunakan untuk menyegerakkan akses. Random

inilah fungsi

yang diperbetulkan: RandomNumber

private static readonly Random random = new Random();
private static readonly object syncLock = new object();

public static int RandomNumber(int min, int max)
{
    lock (syncLock) { // Thread-safe access
        return random.Next(min, max);
    }
}
Salin selepas log masuk
Dengan menggunakan contoh

tunggal dan menyegerakkan akses dengan random, RNG akan mengekalkan keadaan dalamannya, menghasilkan nombor rawak yang unik pada setiap panggilan dalam gelung. lock

Atas ialah kandungan terperinci Mengapa penjana nombor rawak saya hanya menghasilkan satu nombor unik?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan