J'ai commencé à programmer un randomiseur de caractères très récemment. Lorsque vous tapez "bonjour" dans la console, le programme mélangera ces caractères et créera une chaîne aléatoire avec H, E, L et O. Cela devrait être aussi long que le mot tapé dans la console, cela signifie, si vous êtes en tapant un mot de 5 lettres, mon programme renverra également une chaîne de 5 lettres.

Voici mon code:

                string readLine = Console.ReadLine();

                int readLineLength = readLine.Length;

                Random r = new Random();
                char[] letters = readLine.ToCharArray();
                string randomString = "";

                for (int i = 0; i < readLineLength; i++)
                {
                    randomString += letters[r.Next(0, readLineLength)].ToString();
                }

                Console.WriteLine(randomString);
                Console.WriteLine("Press ENTER to generate a random constellation of letters.");

Random.Next fonctionne bien, mais si vous tapez le mot "bonjour", le programme ne mélangera que E, L et O mais ignorera complètement le H.

J'espère que mon problème est assez clair.

0
yonimi 29 août 2020 à 00:59

2 réponses

Meilleure réponse

Le problème est que vous venez d'ignorer le H au hasard, car il n'a pas été sélectionné dans la boucle. Pour mélanger le tableau, utilisez le tri en utilisant OrderBy à partir de System.Linq:

string readLine = Console.ReadLine();

Random r = new Random();
char[] letters = readLine.ToCharArray();
string randomString = string.Join("", letters.OrderBy(x => r.Next()));

Console.WriteLine(randomString);
2
adjan 28 août 2020 à 22:17

La réponse @Adrian est plutôt bonne. Cependant, voici une alternative qui peut être peu simple à comprendre.


    string readLine = Console.ReadLine();
        int readLineLength = readLine.Length;
        Random r = new Random();
        var letters = new List<char>(readLine.ToCharArray());
        string randomString = "";
        for (int i = 0; i < readLineLength; i++)
        {
            int randomIndex = r.Next(letters.Count);
            randomString += letters[randomIndex].ToString();
            letters.RemoveAt(randomIndex);
        }

        Console.WriteLine(randomString);
        Console.WriteLine("Press ENTER to generate a random constellation of letters.");
1
Umang 28 août 2020 à 22:35