2010-10-16 5 views
0

J'ai un problème pour trouver un bon algorithme pour générer une lettre aléatoire. J'ai essayé avec ceci:Générateur de lettres

public static char GetLetter() 
    { 
     int num = random.Next(0, 26); 
     char letter = (char)('a' + num); 

     return letter; 
    } 

que j'ai trouvé sur Internet, mais il génère la même lettre, ou au maximum deux d'entre eux. Par exemple, si je veux remplir la matrice de 4x4 avec des lettres aléatoires en utilisant le code ci-dessus, je reçois:

C C C C 
C C C C 
C C G G 
G G G G 

Toutes les idées ou conseils pour cette question?

Répondre

1

Il semble que vous instanciez une nouvelle instance de votre objet random avant chaque appel à votre méthode.

Le consructeur par défaut de la classe Randomtakes its seed from the system clock, ce qui signifie que si vous créez plusieurs instances en succession courte, elles utiliseront la même graine, ce qui signifie qu'elles généreront la même séquence de nombres aléatoires.

Vous devez créer une instance unique de la classe Random et réutiliser cette même instance chaque fois que votre méthode est appelée.

1

Vous créez certainement beaucoup d'instances de Random au lieu d'utiliser la même instance pour tous les appels. Il est difficile de dire avec certitude que vous n'avez pas montré comment la méthode est utilisée ou où random est déclaré. Je doute aussi que ce soit vraiment le code que vous utilisez, car cela ne ferait que générer 'a' - 'z', pas 'C' ou 'G'.

Lire my article on random number generation pour plus de détails à ce sujet, mais l'idée de base est d'utiliser une instance de Random.