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

Langage Java Discussion :

Génerer chaine de 4 lettres aleatoirement


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut Génerer chaine de 4 lettres aleatoirement
    bonsoir a tous,

    Je bloque sur un problème qui a priori a l'air plutôt simple.

    Je voudrais générer une string de 4 lettres de manière totalement aléatoire. Les 4 lettres font partie du groupe suivant : B, J, V, R, N et M

    Je ne vois pas trop comment faire ça.

    Merci

  2. #2
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Salut.

    En Java, pour générer des nombres aléatoires (enfin "pseudo-aléatoires" serait plus exact), il faut utiliser la méthode random() de la classe Math.

    Cette méthode génère un nombre aléatoire à virgule flottante compris entre :
    0.0 <= x < 1.0

    Donc par exemple pour tirer un nombre un nombre entier entre 1 et 100, tu peux faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int aleatoire = (int)(Math.random()*100) + 1
    // je caste en int pour ne retenir que la partie entière qui est la seule qui m'intéresse et j'ajoute 1 pour avoir des nombre entre 1 et 100 sinon j'aurais des nombre entre 0 et 99
    Ensuite, pour ton problème, un moyen simple de procéder est de mettre chaque lettre de ton groupe dans un tableau. Ensuite, tu procède à un tirage d'un élément de ton tableau grâce à Math.random(), et tu concatène l'élément tiré à une chaine résultat, et ce, 4 fois de suite.


  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 23
    Par défaut
    Salut,

    tu peux aussi utiliser un objet Random, de java.util pour générer un nombre aléatoire en appelant la méthode nextInt(int nbMax) de cet objet.
    Après, comme l'a dit Deadpool tu pourrais faire un tableau contenant ces caractères et faire un tirage de 4 lettres de ce tableau.

    Quelque chose dans le genre:
    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
    import java.util.Random;
        public String genereString(){
            char[] tab=new char[6];
            tab[0]='B';
            tab[1]='J';
            tab[2]='R';
            tab[3]='M';
            tab[4]='N';
            tab[5]='V';
     
            Random rnd=new Random();
            String chaineCaract="";
            for(int i=0;i<4;i++){     
                chaineCaract=chaineCaract+ tab[rnd.nextInt(6)];  //Si on veut qu'il tire des nombres jusqu'à 5 il faut lui mettre 6 en paramètre. 
            }
            return chaineCaract;
        }
    Voilà, j'espère que ça t'a aidé

  4. #4
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    C'est vrai aussi qu'il y a l'objet Random auquel je ne pense jamais.

    Par contre, pour la concaténation d'une chaine dans une boucle, c'est pas terrible d'utiliser l'opérateur +, il faut mieux utiliser un StringBuffer (ou un StringBuilder si la version de java utilisée est >= 5.0).

    Citation Envoyé par metaska Voir le message
    Quelque chose dans le genre:
    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
    import java.util.Random;
        public String genereString(){
            char[] tab=new char[6];
            tab[0]='B';
            tab[1]='J';
            tab[2]='R';
            tab[3]='M';
            tab[4]='N';
            tab[5]='V';
     
            Random rnd=new Random();
            StringBuffer appender = new StringBuilder();
            for(int i=0;i<4;i++){     
                appender.append(tab[rnd.nextInt(6)]);  //Si on veut qu'il tire des nombres jusqu'à 5 il faut lui mettre 6 en paramètre. 
            }
            return appender.toString();
        }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Les solutions proposées permettent à une lettre d'apparaitre plusieurs fois. Est-ce bien le but?

  6. #6
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 23
    Par défaut
    Aie ouais effectivement on n'en sait rien ça n'a pas été précisé.
    Mais dans le cas ou il ne faudrait faire apparaître qu'une fois la lettre par groupe. Ce n'est pas tellement plus compliqué.
    Je ferais comme ceci:

    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
    import java.util.Random;
        public String genereString(){
            char[] tab = new char[6];
            tab[0] = 'B';
            tab[1] = 'J';
            tab[2] = 'R';
            tab[3] = 'M';
            tab[4] = 'N';
            tab[5] = 'V';
     
            Random rnd = new Random();
            StringBuffer appender = new StringBuffer(4); //Création du StringBuffer avec en paramètre sa capacité initiale. 
     
            LinkedList<Integer> listNbTires = new LinkedList();
            while (appender.length() < 4) {
                int nbTire = rnd.nextInt(6); //Si on veut qu'il tire des nombres jusqu'à 5 il faut lui mettre 6 en paramètre. 
     
                if (!listNbTires.contains(nbTire)) {
                    listNbTires.add(nbTire);
                    appender.append(tab[nbTire]);
                }
            }
            return appender.toString();
        }
    Maintenant je ne sais pas si c'est la méthode la plus rapide pour le faire, notamment le choix de la LinkedList par rapport à l'ArrayList, je me trompe quasi systématiquement pour l'emploi le plus judicieux.


    A ce propos, je n'ai pas bien compris cette ligne de code, Deadpool:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     StringBuffer appender = new StringBuilder();
    C'était une faute de frappe ou intentionnel que tu mettes ces 2 types différents ?

Discussions similaires

  1. [RegEx] verifier si une chaine contient des lettres
    Par malabarbe dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2009, 01h28
  2. [WD12] Alignement chaines dans une lettre de change
    Par abdo1966 dans le forum WinDev
    Réponses: 3
    Dernier message: 08/07/2009, 12h54
  3. Comment savoir si une chaine contient des lettres
    Par developpeur_débutant dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 27/05/2009, 12h28
  4. conversion une chaine numérique en lettre
    Par nazimb dans le forum ASP
    Réponses: 1
    Dernier message: 20/11/2005, 17h39
  5. maj 1ère lettre d'une chaine
    Par access001 dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/07/2003, 12h27

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