Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah nombor rawak saya konsisten dalam satu gelung?

Mengapakah nombor rawak saya konsisten dalam satu gelung?

Linda Hamilton
Linda Hamiltonasal
2024-11-04 15:03:19361semak imbas

Why are my random numbers consistent within a loop?

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!

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