Votre générateur de nombres aléatoires (RNG) semble générer un seul numéro unique malgré l'utilisation d'une boucle. Le débogage révèle différents nombres lors de l'exécution de la boucle, mais une fois terminé, tous les éléments du tableau maintiennent la même valeur.
Le problème découle de la création d'une nouvelle instance Random
dans chaque itération de boucle. Étant donné que Random
est souvent ensemencé à l'aide de l'horloge du système, une boucle rapidement exécutée peut initialiser à plusieurs reprises l'objet Random
avec la même graine, conduisant à des sorties identiques.
Le correctif implique l'utilisation d'une seule instance statique Random
sur tous les appels. Cela garantit des mises à jour d'état cohérentes et empêche les valeurs de graines répétées. Pour gérer les scénarios multi-thread en toute sécurité, une serrure est utilisée pour synchroniser l'accès.
Voici la fonction corrigée RandomNumber
:
<code class="language-csharp">private static readonly Random random = new Random(); private static readonly object syncLock = new object(); public static int RandomNumber(int min, int max) { lock (syncLock) { // Thread-safe access return random.Next(min, max); } }</code>
En utilisant une seule instance random
et en synchroniser l'accès avec lock
, le RNG conservera son état interne, produisant des nombres aléatoires uniques sur chaque appel dans la boucle.
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!