Memahami Nombor Rawak Konsisten dalam Lelaran
Dalam coretan kod yang disediakan, diperhatikan bahawa nombor rawak yang dijana dalam lelaran gelung kekal konsisten. Khususnya, pembolehubah 'carSetter' dan 'decider' mengekalkan nilai yang sama sepanjang 15 lelaran walaupun gelung bertujuan untuk menjana nilai unik.
Tingkah laku ini timbul disebabkan oleh penempatan srand(time(0)) dalam gelung . Ia menentukan urutan nombor pseudorandom yang dikembalikan dalam panggilan berikutnya ke rand(). Masalahnya terletak pada fakta bahawa masa(0) biasanya mengembalikan nilai yang sama semasa pelaksanaan gelung, yang membawa kepada penjanaan siri nombor rawak yang konsisten.
Untuk membetulkan isu ini dan memastikan rawak sebenar, ia adalah penting untuk mengalihkan panggilan awal ke srand(time(0)) di luar gelung. Dengan berbuat demikian, anda memulakan penjana nombor rawak sekali sahaja, memastikan urutan nombor rawak berbeza dengan ketara merentas lelaran. Kod berikut menunjukkan pembetulan ini:
srand(time(0)); // Called once at the program's start for (int i = 0; i < 15; i++) { carSetter = rand() % 3 + 1; decider = rand() % 2 + 1; // ... Rest of the code within the loop }
Pengubahsuaian ini membenarkan gelung menjana nombor rawak yang berbeza dengan setiap lelaran seperti yang dimaksudkan. Ambil perhatian bahawa adalah tidak perlu untuk memanggil srand() dalam gelung kerana penjana nombor pseudorandom akan terus menghasilkan nilai unik sehingga anda menetapkan semula secara eksplisit dengan panggilan lain ke srand().
Atas ialah kandungan terperinci Mengapakah nombor rawak saya konsisten dalam satu gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!