IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Chaine aléatoire c#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Par défaut Chaine aléatoire c#
    Bonjour a tous,

    Je souhaite créer un grand nombre de chaine aléatoire, pour cela j'ai créé une fonction retournant une chaine avec en paramètre la taille voulue. Et maintenant le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static string random_string(int size)
            {            
                string dico = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
                char[] chars = new char[size];
                Random rand = new Random();
     
                for (int i = 0; i < size; i++)
                {
                    chars[i] = dico[randd.Next(0, dico.Length)];
                }
     
                return new string(chars);
             }
    Maintenant je vais appeler cette fonction un certain nombre de fois et elle va me renvoyer a chaque fois une chaine avec la même base, exemple :
    "RSYMBDULW" "RSYMBDULWB" "RSYMB" "RSYMBDUL" etc.
    Je test donc en utilisant le pas a pas et la miracle cela me donne des chaines différentes les unes des autres :
    "AHFF" "PPFVNEI" "EOPFN" etc.
    Après de nombreuses tentatives, toujours le même résultat ... Donc j'aimerais savoir si quelqu'un a une explication et une solution.
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut
    ton grand nombre de chaine aléatoire dont tu parles, elles auront toutes le même début de chaine de caractères comme dans ton exemple ou pas?

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Par défaut
    oui 100% des chaines créées ont le même début, sauf lors de l'utilisation du pas à pas ou tout est réellement aléatoire

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut
    Ton problème c'est que tu redéfinie à chaque fois un nouveau tableau de caractères. Donc il te génère une nouvelle chaine à chaque fois.

    Ce qu'il faut faire, c'est un random sur ton dico et que ça te créé une nouvelle chaîne de caractères.
    tu la sauvegardes dans une variable string.
    Ensuite tu compare ta variable string (nombre de caractères) au size, si c'est plus grand tu récupère juste le nombre de caractères voulu, si c'est égal c'est bon, et enfin, si c'est plus petit, tu rajoute des lettres au hazard à la fois dans ta variable string et dans ton tableau de charactères.

    J'espère avoir été clair^^; je pense que ça marchera!!

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Chouchem Voir le message
    Après de nombreuses tentatives, toujours le même résultat ... Donc j'aimerais savoir si quelqu'un a une explication et une solution.
    Merci
    C'est un problème de "seed". Quand tu instancies Random, il s'initialise sur une base date/heure; si tu le fais de manière proche les séquences sont identiques.

    http://msdn.microsoft.com/en-us/library/h343ddh9

    Tu peux tenter d'initialiser sur les tick d'horloge. (DateTime.Now.Ticks ) en ajoutant à ticks un nombre correspondant au nombre d'appels de ta fonnction ou plus simple, créer une classe ou tu instancies Random une fois et appeler ensuite la fonction de génération des nombres sans réinitialiser la séquence.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
       class RandomString
        {
            private Random _rand;
     
            public RandomString()
            {
                _rand = new Random();
            }
            public string NextString(int size)
            {     
                char[] chars = new char[size];                      
     
                for (int i = 0; i < size; i++)
                {
                    chars[i] = (char)_rand.Next((int)'A', (int)'Z' + 1);
                }
     
                return new string(chars);
             } 
        }
     
        class Program
        {
            static RandomString rs = new RandomString();
            public static void Main()
            {
            for(int i = 0; i < 20; i++)
                {
                    Console.WriteLine(rs.NextString(20));
                }
            Console.ReadKey();
            }
        }
    fonctionne a priori.

    Accessoirement la variable dico ne sert pas à grand chose : autant retourner directement un nombre correspondant au code ASCII entre A et Z (+ 1) (ce que je fait dans l'exemple supra).

Discussions similaires

  1. Générer une chaine aléatoire
    Par java_fun dans le forum Général Java
    Réponses: 24
    Dernier message: 07/11/2018, 23h03
  2. Réponses: 12
    Dernier message: 26/11/2010, 14h22
  3. [RegEx] Remplacer des mots d'une chaine aléatoirement
    Par sigmoun dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2009, 18h56
  4. Générer une chaine aléatoire
    Par Thomus38 dans le forum C++
    Réponses: 5
    Dernier message: 21/07/2008, 22h45
  5. Besoin de générer une chaine aléatoire
    Par warsky dans le forum Langage
    Réponses: 7
    Dernier message: 01/12/2005, 19h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo