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
Linda Hamiltonoriginal
2025-01-05 22:41:38579parcourir

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();
}

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();
}

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:
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