Maison > développement back-end > C++ > Pourquoi mon générateur de nombres aléatoires C# produit-il la même séquence sur plusieurs objets ?

Pourquoi mon générateur de nombres aléatoires C# produit-il la même séquence sur plusieurs objets ?

Patricia Arquette
Libérer: 2025-01-24 23:26:09
original
361 Les gens l'ont consulté

Why Does My C# Random Number Generator Produce the Same Sequence Across Multiple Objects?

Comprendre la génération de nombres aléatoires en C# et éviter la répétition de séquence

Cet article aborde un problème courant en C# : plusieurs instances de la classe Random générant des séquences de nombres aléatoires identiques. La classe Random, bien que conçue pour générer des nombres apparemment imprévisibles, s'appuie sur une valeur de départ pour son algorithme interne. Si plusieurs Random objets sont créés en succession rapide, ils reçoivent souvent des valeurs de départ similaires (souvent basées sur l'horloge système), ce qui entraîne des séquences de sortie identiques.

Le problème : plusieurs Random instances

Créer une nouvelle Random instance pour chaque objet nécessitant des nombres aléatoires est la cause première. Étant donné que les valeurs de départ sont proches les unes des autres, les séquences générées sont presque identiques.

La solution : une Random instance unique et partagée

La solution est simple : créez une seule Random instance et partagez-la entre tous les objets nécessitant des nombres aléatoires. Cela garantit que chaque objet s'inspire de la même séquence évolutive, évitant ainsi le problème de répétition.

Voici comment implémenter cela à l'aide d'un membre statique :

<code class="language-csharp">class A
{
    private static readonly Random rnd = new Random(); // Static, read-only instance

    public void Count()
    {
        int r1 = rnd.Next(-1, 1);
        int r2 = rnd.Next(-1, 1);
    }
}

class B
{
    List<A> listOfA = new List<A>();

    public void DoSomething()
    {
        foreach (A aClass in listOfA)
        {
            aClass.Count();
        }
    }
}</code>
Copier après la connexion

En utilisant un champ static readonly, nous garantissons qu'une seule instance Random est créée une seule fois et partagée entre toutes les instances de la classe A. Cela élimine le risque de valeurs de départ en double et garantit des séquences de nombres aléatoires uniques pour chaque appel à rnd.Next(). Cette approche produit des séquences véritablement aléatoires et distinctes pour chaque A objet.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal