Répétition de nombres aléatoires dans les itérations de boucle
Considérez le problème suivant : dans une boucle qui exécute 15 itérations, la méthode dh.setDoors() est appelé. Dans setDoors(), srand(time(0)) est invoqué pour définir une graine pour la génération de nombres aléatoires. Par la suite, des nombres aléatoires sont générés à l'aide d'expressions telles que carSetter = rand()%3 1 ou decider = rand()%2 1.
La surveillance des valeurs de carSetter et de decider révèle qu'elles restent constantes tout au long de chaque itération de boucle. , mais changez entre les différentes exécutions de boucle. Ce comportement est inattendu car la boucle implique 15 itérations indépendantes, ce qui suggère que chaque valeur aléatoire doit varier.
Enquête sur la cause
Le problème vient du placement de srand( time(0)) au début de chaque itération. En réinitialisant la graine à chaque boucle, la séquence de nombres pseudo-aléatoires est effectivement fixée par la valeur constante de time(0) au sein de l'itération. Comme le temps (0) reste le même tout au long de la boucle, la même séquence de nombres aléatoires est générée.
Résoudre le problème
Pour résoudre ce problème, il est recommandé de initialisez le générateur de nombres aléatoires une seule fois, au début du programme plutôt qu'à chaque itération de boucle. Cela garantit que différentes séquences de nombres aléatoires sont utilisées pour chaque itération de boucle.
L'implémentation révisée ressemblerait à ce qui suit :
srand(time(0)); // Call srand() once at the start of the program while (...) { x = rand(); y = rand(); }
Avec cette modification, les valeurs de x et y varieront entre itérations de boucle, produisant le comportement souhaité de différentes séquences de nombres aléatoires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!