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 ?
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!