Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1820 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Generer aleatoirement un caractère à partir d'un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Generer aleatoirement un caractère à partir d'un tableau

n°1919702
JFC31
Posté le 30-08-2009 à 21:30:02  profilanswer
 

Bonsoir à tous.
Je tente de générer un mot de passe à partir de caractères sélectionnés aléatoirement dans un tableau. Cependant, la fonction Random ne prend pas le type char en paramètre. Si quelqu'un peut m'aider, merci beaucoup ... Voici le code :  
 

Code :
  1. Random r = new Random();
  2.        String motPasse = null;
  3.        char [] tableauLettres = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  4.        int [] tableauChiffres = {0,1,2,3,4,5,6,7,8,9};
  5.        char [] tableauCaracteres = {'@','-','#','_','!'};
  6.            
  7.            // sélectionne au hasard un indice dans le tableau
  8.            int mpChiffre = r.nextInt(tableauChiffres.length);
  9.            System.out.println(mpChiffre);
  10.            // retourne le nombre correspondant à cette indice
  11.            mpChiffre = tableauChiffres[mpChiffre];
  12.            System.out.println(mpChiffre);
  13.  
  14.            char mpLettres = r.nextInt(tableauLettres.length);
  15.            System.out.println(mpLettres);
  16.            mpLettres = tableauChiffres[mpLettres];
  17.            System.out.println(mpLettres);


Message édité par JFC31 le 30-08-2009 à 21:30:47
mood
Publicité
Posté le 30-08-2009 à 21:30:02  profilanswer
 

n°1919748
sircam
I Like Trains
Posté le 31-08-2009 à 09:01:00  profilanswer
 

- Pourquoi veux-tu passer un char à la "fonction Random" ?
- Ton nextInt te renvoie l'indice dans le tableau, par la valeur à cet indice. C'est pourtant bien commenté dans ton code. Tu as repris du code que tu ne comprends pas?
- Il y a qq chose d'horrible dans ta déclaration de tableauLettres et tableauChiffres.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1919923
JFC31
Posté le 31-08-2009 à 14:39:28  profilanswer
 

c'est ok ça marche. Merci sircam
Qu'est ce qui est horrible dans ma déclaration ?

n°1920019
JFC31
Posté le 31-08-2009 à 17:52:24  profilanswer
 

C'est sûr mais il faut un mot de passe de 6 caractères avec 2 lettres, 2 chiffres et 2 caractères ...

n°1920032
JFC31
Posté le 31-08-2009 à 18:30:44  profilanswer
 

Je récupère 2 lettres, 2 chiffres et 2 caractères que je dois ensuite placer dans un tableau de caracteres mais je n'arrive pas à les mettre dans le tableau :

Code :
  1. Random r = new Random();
  2.        String motPasse = null;
  3.        char [] tableauChiffres = {'0','1','2','3','4','5','6','7','8','9'};
  4.        //int [] tableauChiffres = {0,1,2,3,4,5,6,7,8,9};
  5.        char [] tableauLettres = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  6.        char [] tableauCaracteres = {'@','-','#','_','!'};
  7.        char [] constructionMP = new char [6];
  8.        char mpChiffre = ' ';
  9.        
  10.            for (int i = 0; i < 2; i++){
  11.                
  12.                // ON RECUPERE UN CHIFFRE
  13.                // sélectionne au hasard un indice dans le tableau
  14.                int indiceChiffre = r.nextInt(tableauChiffres.length);
  15.                System.out.print("-chiffre : "+indiceChiffre+" => " );
  16.                // retourne le nombre correspondant à cette indice
  17.                mpChiffre = tableauChiffres[indiceChiffre];
  18.                System.out.println(mpChiffre);
  19.                
  20.                // ON RECUPER UNE LETTRE
  21.                int indiceLettre = r.nextInt(tableauLettres.length);
  22.                System.out.print("-lettre : "+indiceLettre+" => " );
  23.                char mpLettre = tableauLettres[indiceLettre];
  24.                System.out.println(mpLettre);
  25.                
  26.                // ON RECUPERE UN CARACTERE
  27.                int indiceCaractere = r.nextInt(tableauCaracteres.length);
  28.                System.out.print("-caractere : "+indiceCaractere+" => " );
  29.                char mpCaractere = tableauCaracteres[indiceCaractere];
  30.                System.out.println(mpCaractere);
  31.        
  32.             }

n°1920053
sircam
I Like Trains
Posté le 31-08-2009 à 20:53:45  profilanswer
 

JFC31 a écrit :

Qu'est ce qui est horrible dans ma déclaration ?


Tu a écris tout l'alphabet. Une boucle sur chacune des lettres serait :
 

  • Plus élégante
  • Moins sujette à erreur : si tu oublies une lettre, ou que tu la répètes, ton programme donnera un résultat erroné.


Imagine que tu doive déclarer une telle suite non pas de 26 lettres mais de 10.000 caractères qui se suivent... Tu serais bien embêté. Bien sûr, on peut pousser le vice assez loin. Mais pour moi, les 10 chiffres, c'est déjà de trop! L'informaticien est naturellement paresseux.  [:dawa]  
 


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1921563
cbeyls
Hail to the King, Baby
Posté le 05-09-2009 à 21:47:22  profilanswer
 

JFC31, j'ai 2 questions:
 
1) Tu dis qu'il faut 2 lettres, 2 chiffres et 2 caractères spéciaux, mais doivent-il se trouver dans un ordre précis? Si non, ton programme n'en tient pas compte car il les génère toujours dans le même ordre.
2) Les lettres doivent elles être uniquement en minuscule ou bien majuscules ou minuscules au choix?
 
Pour les lettres et les chiffre, je n'utiliserais pas de tableau de lettres ou de chiffres qui ne sert à rien sauf si tu veux exclure certaines lettres ou certains chiffres. Et pas besoin de faire des boucles d'initialisation non plus.
 
Voilà comment je l'écrirais:
 

Code :
  1. // Générer une lettre aléatoire en minuscule
  2. char c = (char)((int)'a' + r.nextInt(26));


 

Code :
  1. // Générer un chiffre aléatoire
  2. char c = (char)((int)'0' + r.nextInt(10));


Message édité par cbeyls le 05-09-2009 à 21:50:36
n°1921584
cbeyls
Hail to the King, Baby
Posté le 06-09-2009 à 00:53:48  profilanswer
 

Voici un générateur de mot de passe de 6 caractères dont 2 lettres minuscules, 2 chiffres et 2 caractères spéciaux.
Les caractères sont mélangés dans un ordre quelconque.
 

Code :
  1. public class GenerateurMDP {
  2.     
  3.     public static final int        NOMBRE_LETTRES    = 26;
  4.     public static final int        NOMBRE_CHIFFRES    = 10;
  5.     public static final char[]    CARACTERES        = {'@','-','#','_','!'};
  6.     public static final Random    R                = new Random();
  7.     
  8.     public static String getMDP() {
  9.         char[] mdp = new char[6];
  10.         
  11.         // Génère les caractères aléatoires
  12.         int j = 0;
  13.         for (int i = 0; i < 2; ++i) {
  14.             // Assigne une lettre minuscule aléatoire
  15.             mdp[j++] = (char)((int)'a' + R.nextInt(NOMBRE_LETTRES));
  16.             // Assigne un chiffre aléatoire
  17.             mdp[j++] = (char)((int)'0' + R.nextInt(NOMBRE_CHIFFRES));
  18.             // Assigne un caractère aléatoire
  19.             mdp[j++] = CARACTERES[R.nextInt(CARACTERES.length)];
  20.         }
  21.         
  22.         // Mélange les caractères
  23.         char temp;
  24.         for (int i = mdp.length; i > 0;) {
  25.             j = R.nextInt(i);
  26.             --i;
  27.             temp = mdp[i];
  28.             mdp[i] = mdp[j];
  29.             mdp[j] = temp;
  30.         }
  31.         
  32.         return new String(mdp);
  33.     }
  34.     
  35.     public static void main(String[] args) {
  36.         System.out.println(getMDP());
  37.     }
  38. }


 
Si tu souhaites que les lettres soient en majuscules OU en minuscules, modifie les lignes suivantes:
 

Code :
  1. // Assigne une lettre minuscule aléatoire
  2.             mdp[j++] = (char)((int)'a' + R.nextInt(NOMBRE_LETTRES));


comme ceci:

Code :
  1. // Assigne une lettre aléatoire
  2.             mdp[j++] = (char)((int)(R.nextBoolean() ? 'a' : 'A') + R.nextInt(NOMBRE_LETTRES));

n°2169994
ettalbi
Posté le 05-01-2013 à 20:34:35  profilanswer
 


 
la fonction Random ne prend pas la valeur des elements  de votre tableau mais elle prend l'indice de ses valeurs ,alors si tu voudras afficher  le caractère sélectionnée aléatoirement tu doit ecrire : System.out.println(tableauLettes[mpLettres]); ok ;)
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Generer aleatoirement un caractère à partir d'un tableau

 

Sujets relatifs
[Algo][Résolu]Générer tous les accords.Récuperer un tableau excel
Génerer le .exeinitialisation d'un tableau de pointeur
centrer un tableau verticalement ?problème d'allocation du tableau
Constructeur Tableau - Merci pour votre aide ! :-)batch à partir d'un fichier ip plus fichier de log
Allocation d'un tableau dans une fonction[VB/VBA/VBS] Excel - Lien entre Tableau croisé dynamique et cellule
Plus de sujets relatifs à : Generer aleatoirement un caractère à partir d'un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR