web-dev-qa-db-fra.com

Choisissez un personnage aléatoire

j'ai quelques personnages:

chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();

maintenant, je cherche une méthode pour renvoyer un caractère aléatoire de ceux-ci.

J'ai trouvé un code qui peut être utile:

static Random random = new Random();
        public static char GetLetter()
        {
            // This method returns a random lowercase letter
            // ... Between 'a' and 'z' inclusize.
            int num = random.Next(0, 26); // Zero to 25
            char let = (char)('a' + num);
            return let;
        }

ce code me renvoie un caractère aléatoire de l'alphabet mais ne me renvoie que des lettres minuscules

13
user2139293

Eh bien, vous y êtes presque - vous voulez renvoyer un élément aléatoire d'une chaîne, vous générez donc un nombre aléatoire dans la plage de la longueur de la chaîne:

public static char GetRandomCharacter(string text, Random rng)
{
    int index = rng.Next(text.Length);
    return text[index];
}

Je conseillerais donc contre d'utiliser une variable static de type Random sans aucun verrouillage, soit dit en passant - Random n'est pas thread-safe. Voir mon article sur les nombres aléatoires pour plus de détails (et solutions de contournement).

29
Jon Skeet

Cela pourrait fonctionner pour vous:

public static char GetLetter()
{
    string chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
    Random Rand = new Random();
    int num = Rand.Next(0, chars.Length -1);
    return chars[num];
}
8
jordanhill123

Vous pouvez l'utiliser comme;

char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();
Random r = new Random();
int i = r.Next(chars.Length);
Console.WriteLine(chars[i]);

Voici une DEMO .

5
Soner Gönül

Au lieu de 26, veuillez utiliser la taille de votre tampon CHARS.

int num = random.Next(0, chars.Length)

Puis au lieu de 

let = (char)('a' + num)

utilisation

let = chars[num]
3
Yaugen Vlasau

J'avais un problème approximatif et je l'ai fait de cette manière:

public static String GetRandomString()
{
    var allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
    var length = 15;

    var chars = new char[length];
    var rd = new Random();

    for (var i = 0; i < length; i++)
    {
        chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
    }

    return new String(chars);
}
3
private static void Main(string[] args)
        {
            Console.WriteLine(GetLetters(6));
            Console.ReadLine();
        }

        public static string GetLetters(int numberOfCharsToGenerate)
        {
            var random = new Random();
            char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();

            var sb = new StringBuilder();
            for (int i = 0; i < numberOfCharsToGenerate; i++)
            {
                int num = random.Next(0, chars.Length);
                sb.Append(chars[num]);
            }
            return sb.ToString();
        }
2
Matt

Je ne suis pas sûr de son efficacité, car je suis très novice en matière de codage. Cependant, pourquoi ne pas utiliser simplement le nombre aléatoire que vous créez déjà? Est-ce que cela ne "randomise" pas un caractère en majuscule aussi?

    int num = random.Next(0,26);           
    char let = (num > 13) ? Char.ToUpper((char)('a' + num)) : (char)('a' + num);

Aussi, si vous cherchez à prendre une seule lettre de votre caractère [], serait-il plus facile d'utiliser simplement une chaîne?

    string charRepo = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&"; 
    Random rando = new Random();
    int ranNum = rando.Next(0, charRepo.Length);

    char ranChar = charRepo[ranNum];
1
Decon21

Je souhaite que ce code vous aide: 

 string s = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
            Random random = new Random();
            int num = random.Next(0, s.Length -1);
            MessageBox.Show(s[num].ToString());
1
Saman Gholami

Obtenir le caractère à partir de ASCII numéro:

private string GenerateRandomString()
{
Random rnd = new Random();
string txtRand = string.Empty;
for (int i = 0; i <8; i++) txtRand += ((char)rnd.Next(97, 122)).ToString();
return txtRand;
}
1
Shirish Joshi

Vous pouvez essayer ceci:

 public static string GetPassword()
 {
string Characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 Random rnd = new Random();
int index = rnd.Next(0,51);
string char1 = Characters[index].ToString();
return char1;
  }

Vous pouvez maintenant jouer avec ce bloc de code selon vos souhaits. À votre santé!

0
user5710892