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
Barbara Streisandasal
2025-02-03 08:31:09657semak imbas

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

<code class="language-csharp">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);
    }
}</code>
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:
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