Maison > développement back-end > C++ > Pourquoi mon générateur de chaînes aléatoires continue-t-il à produire la même chaîne ?

Pourquoi mon générateur de chaînes aléatoires continue-t-il à produire la même chaîne ?

Linda Hamilton
Libérer: 2025-01-05 22:41:38
original
615 Les gens l'ont consulté

Why Does My Random String Generator Keep Producing the Same String?

Problème de cohérence du générateur de chaînes aléatoires

Problème :

Un générateur de chaînes aléatoires ne parvient pas à produire des chaînes distinctes malgré son appel répété. Au lieu de cela, il génère la même chaîne aléatoire à plusieurs reprises.

Code :

private string RandomString(int size)
{
    StringBuilder builder = new StringBuilder();
    Random random = new Random(); // Random object created each time
    char ch;
    for (int i = 0; i < size; i++)
    {
        ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));                 
        builder.Append(ch);
    }

    return builder.ToString();
}
Copier après la connexion

Raison :

Le problème réside dans la création d'un nouvel objet Random au sein de la méthode RandomString. Cela initialise le générateur de nombres aléatoires avec la même graine à chaque fois, conduisant à la même séquence de nombres aléatoires et, finalement, à la même chaîne aléatoire.

Solution :

Pour garantir deux chaînes aléatoires distinctes, l'objet Random doit être créé en dehors de la méthode RandomString et rendu statique. Cela garantit que la même graine est utilisée tout au long de la durée de vie de l'application, produisant une séquence cohérente de nombres aléatoires et de chaînes distinctes à chaque appel.

Code modifié :

private static Random random = new Random((int)DateTime.Now.Ticks); // Random object created outside method

private string RandomString(int size)
{
    StringBuilder builder = new StringBuilder();
    char ch;
    for (int i = 0; i < size; i++)
    {
        ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));                 
        builder.Append(ch);
    }

    return builder.ToString();
}
Copier après la connexion

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!

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