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

Java Discussion :

Générer une chaine aléatoire


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de java_fun
    Inscrit en
    Novembre 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 117
    Par défaut Générer une chaine aléatoire
    Je veux générer une chaîne aléatoire de 5 car dont les caractères peuvent être des chiffres ou des Lettres en Majuscules.
    cordialement

  2. #2
    Membre éprouvé Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Par défaut
    Sans faire dans la finesse, je peux te proposer ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public String generate(int length)
    {
    	    String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // Tu supprimes les lettres dont tu ne veux pas
    	    String pass = "";
    	    for(int x=0;x<length;x++)
    	    {
    	       int i = (int)Math.floor(Math.random() * 62); // Si tu supprimes des lettres tu diminues ce nb
    	       pass += chars.charAt(i);
    	    }
    	    System.out.println(pass);
    	    return pass;
    }
    +

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bon y a surement mieux mais bon :
    tu prends un tableau de char "abcd ... xyz"
    Un random number et tu accedes 5 fois ton tableau.

    Mais je suis certain qu'il existe des fonctions toutes faites

  4. #4
    Invité
    Invité(e)
    Par défaut
    On a été plus rapide et plus clair que moi
    Sorry

  5. #5
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Tiens... ici
    Pret à l'emploi...

  6. #6
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    il n'y a pas moyen de passer par l'unicode ??


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  7. #7
    Membre confirmé Avatar de java_fun
    Inscrit en
    Novembre 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 117
    Par défaut
    merci c résolu ja imodi un peu pour répondre à mon besoin

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 19
    Par défaut
    Pour optimiser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String generate(int length) {
    	    String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // Tu supprimes les lettres dont tu ne veux pas
    	    String pass = "";
    	    for(int x=0;x<length;x++)   {
    	       int i = (int)Math.floor(Math.random() * chars.length() -1); // Si tu supprimes des lettres tu diminues ce nb
    	       pass += chars.charAt(i);
    	    }
    	    System.out.println(pass);
    	    return pass;
    }

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 93
    Par défaut
    Pour optimiser et corriger un bug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static String generate(int length) {
            String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; 
            StringBuffer pass = new StringBuffer();
            for(int x=0;x<length;x++)   {
               int i = (int)Math.floor(Math.random() * (chars.length() -1));
               pass.append(chars.charAt(i));
            }
            return pass.toString();
    }
    Remarque si la méthode n'est pas static, vous pouvez remplacer le StringBuffer par un StringBuilder.
    Les parenthèse sont obligatoire car si rand tire pa exemple un nombre tel 0.00001, le floor retourné sera -1... outofrangeException


    désolé de remonter ce sujet mais il sort avec la recherche google, et je cherchais s'il existait des solutions toute faite.

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par _xme_ Voir le message
    Remarque si la méthode n'est pas static, vous pouvez remplacer le StringBuffer par un StringBuilder.
    C'est pas une question de static ou pas. Static ou pas, ici le StringBuffer n'est pas réutilisé d'un appel à l'autre, donc il vaut mieux utiliser un StringBuilder.
    En fait, c'est assez rare qu'on puisse se permettre de partager un StringBuffer d'un appel à l'autre, donc, presque toujours, il faut faire les choses de sorte qu'il vaille mieux un StringBuilder.

    désolé de remonter ce sujet mais il sort avec la recherche google, et je cherchais s'il existait des solutions toute faite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nbChars = chars.length();
    ...
    Random.nextInt(nbChars);
    simplifie déjà pas mal les choses. Mais je n'ai pas connaissance d'un algo intégré à la bibliothèque de base pour faire une chaîne de caractères aléatoire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par _xme_ Voir le message
    Remarque si la méthode n'est pas static, vous pouvez remplacer le StringBuffer par un StringBuilder.
    Il est bien sûr préférable d'utiliser StringBuffer/StringBuilder à la place de l'opérateur +, mais comme indiqué par thelvin, dans ce code il n'y a aucune raison d'utiliser un StringBuffer en particulier, puisqu'on manipule une variable locale qui n'est en aucun cas partagée avec un autre thread.

    Citation Envoyé par _xme_ Voir le message
    Les parenthèse sont obligatoire car si rand tire pa exemple un nombre tel 0.00001, le floor retourné sera -1... outofrangeException
    En fait il ne faut pas du tout enlever -1 à la taille du tableau.

    Math.random() renvoi toujours un nombre inférieur à 1.0, donc Math.random() * chars.length() renvoi forcément un nombre inférieur à la taille du tableau. Si on fait le -1 le dernier caractère ne pourra jamais être tiré...

    De plus le Math.floor() est inutile puisque derrière on caste en int, ce qui aura pour conséquence de "perdre" les décimales...


    Une dernière optimisation mineure serait d'initialiser le StringBuilder avec la taille de la chaine finale, puisqu'on la connait (cela peut permettre d'éviter quelques redimensionnement automatique du buffer).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public static String generate(int length) {
    		String chars = "a";
    		StringBuilder pass = new StringBuilder(length);
    		for (int x = 0; x < length; x++) {
    			int i = (int) (Math.random() * chars.length());
    			pass.append(chars.charAt(i));
    		}
    		return pass.toString();
    	}

    Citation Envoyé par thelvin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nbChars = chars.length();
    ...
    Random.nextInt(nbChars);
    simplifie déjà pas mal les choses. Mais je n'ai pas connaissance d'un algo intégré à la bibliothèque de base pour faire une chaîne de caractères aléatoire.
    nextInt() n'est pas static, et il faut créer une instance de Ramdom pour l'utiliser. Ce n'est pas forcément plus pratique...


    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Générer une chaine aléatoire
    Par Thomus38 dans le forum C++
    Réponses: 5
    Dernier message: 21/07/2008, 22h45
  2. Générer une variable aléatoire gaussienne
    Par User dans le forum Probabilités
    Réponses: 5
    Dernier message: 29/06/2006, 22h58
  3. Générer une string aléatoire
    Par eG.dam dans le forum C++
    Réponses: 2
    Dernier message: 22/06/2006, 00h17
  4. Réponses: 14
    Dernier message: 15/05/2006, 16h34
  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