Rumah >pembangunan bahagian belakang >C++ >Mengapa Nombor Rawak Saya Sentiasa Sama dalam Setiap Lelaran Gelung?
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!