Rumah >pembangunan bahagian belakang >C++ >Mengapa Nombor Rawak Saya Sentiasa Sama dalam Setiap Lelaran Gelung?

Mengapa Nombor Rawak Saya Sentiasa Sama dalam Setiap Lelaran Gelung?

Susan Sarandon
Susan Sarandonasal
2024-11-04 13:14:02249semak imbas

Why Are My Random Numbers Always the Same in Each Loop Iteration?

Memastikan Nombor Rawak Berbeza dalam Setiap Lelaran Gelung

Dalam kod anda, anda mempunyai gelung for yang berulang 15 kali, memanggil dh.setDoors () dalam setiap lelaran. dh.setDoors() memanggil srand(time(0)), yang menetapkan benih untuk penjana nombor rawak. Selepas itu, apabila nombor rawak diperlukan, ia dijana menggunakan carSetter = rand()%3 1 atau decider = rand()%2 1.

Walau bagaimanapun, anda telah memerhatikan bahawa nilai carSetter dan decider kekal yang sama sepanjang 15 lelaran. Ini berlaku kerana memanggil srand(time(0)) pada permulaan setiap lelaran menetapkan benih kepada nilai yang sama, yang menghasilkan urutan nombor rawak yang sama dijana.

Tingkah laku yang dimaksudkan adalah untuk carSetter dan penentu untuk menjana nombor rawak yang berbeza dalam setiap lelaran. Ini boleh dicapai dengan mengalihkan panggilan ke srand(time(0)) di luar gelung, seperti berikut:

srand(time(0));

for (int i = 0; i < 15; i++) {
    dh.setDoors();
}

Ini memastikan bahawa srand(time(0)) dipanggil sekali sahaja, pada permulaan program, dan dengan itu urutan nombor rawak baharu dijana sebelum setiap lelaran gelung. Ini menangani isu nombor rawak pseudo yang sama dijana dalam setiap gelung.

Atas ialah kandungan terperinci Mengapa Nombor Rawak Saya Sentiasa Sama dalam Setiap Lelaran 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