[JAVA] Random dans un pattern

Random dans un pattern [JAVA] - Java - Programmation

Marsh Posté le 22-10-2009 à 11:05:55    

Bonjour à tous,  
 
Je lutte depuis un moment maintenant sur quelque chose que j'essaie de faire en java et je viens voir si quelqu'un aurait une idée  :??:  
 
Donc voilà mon problème :  
 
J'ai une chaîne de type expression régulière, par exemple : A-H ou 0-8 et j'aimerai récupérer une valeur aléatoire dans cette expréssion régulière.
Donc ça donnerait un truc du genre :  
            maFonction("0-8" ) renvoie 0 ou 1 ou 2 ou 3 etc...  
        et maFonction("A-H" ) renvoie A ou B ou C ou D etc...
 
Je n'ai aps d'idée efficace pour faire ça, si un de vous en a une je suis preneur  :bounce:  

Reply

Marsh Posté le 22-10-2009 à 11:05:55   

Reply

Marsh Posté le 22-10-2009 à 13:47:27    


Et si tu essaye un truc du genre ?

Code :
  1. mafonction(String pattern){
  2. String[] bornes = pattern.split("-" );
  3. Vector vect = new Vector();
  4. if (bornes[0].isNumber()){
  5. int i = bornes[0];
  6. while i <= bornes[1]{
  7. vector.add(i++);
  8. }else{
  9. //Ici il faut incrémenter des lettres
  10. }
  11. return vector.get(myRandom(vector.size()));
  12. }


 
Bien sur ce code ne compile pas, c'est pour l'exemple...
 


---------------
.
Reply

Marsh Posté le 22-10-2009 à 13:54:08    

Une idée serait de traduire les caractères en ascii, tu as alors un intervalle dont les deux bornes sont des nombres. Tu peux ensuite utiliser un objet Random de base en java.
 
Je m'explique clairement avec un exemple :
Tu as un intervalle "A-H" ce qui correspond en code ascii à "65-72" (http://www.commentcamarche.net/con [...] ascii.php3), que tu transformes ensuite en "0-7" en soustrayant les deux membres par le plus petit (65 - 65; 72 - 65). Ensuite, code java :

Citation :

java.util.Random random = new java.util.Random(7);
int res = random.nextInt();


Enfin, tu n'as plus qu'à retraduire en caractère l'entier res après lui avoir rajouter 65...
 
En imaginant que res soit égal à 5, tu te retrouves avec 5 + 65 = 70 ce qui correspond à la lettre F.
 
Dis moi si ça fonctionne ! Bonne chance.
InTech


Message édité par intech le 22-10-2009 à 14:15:03
Reply

Marsh Posté le 22-10-2009 à 14:10:01    

Ca marche en combinant vos 2 réponses :)
 
Je pensais en fait qu'il y avait une solution en utilisant directemnt l'objet Pattern mais je n'ai rien trouvé dans ce sens là.
 
En tout cas merci à vous 2 ;)

Reply

Marsh Posté le 22-10-2009 à 14:16:22    

Utilise plutôt le code ASCII au lieu du code HEXA, j'ai mis à jour mon premier POST.

Reply

Marsh Posté le 22-10-2009 à 14:59:01    

Non je crois que c'est de l'Unicode. didier1809: Vector is bad!
 
Donc à supposer que la chaîne de caractères fasse toujours 3 caractères avec un tiret comme deuxième caractère, tu peux faire:
 

Code :
  1. static Random r = new Random();
  2.  
  3. static char randomChar(String pattern) {
  4.     int min = pattern.charAt(0), max = pattern.charAt(2);
  5.     return (char) (min + r.nextInt(max-min+1));
  6. }

Reply

Marsh Posté le 22-10-2009 à 15:05:46    

cbeyls a écrit :

Non je crois que c'est de l'Unicode. didier1809: Vector is bad!
 
Donc à supposer que la chaîne de caractères fasse toujours 3 caractères avec un tiret comme deuxième caractère, tu peux faire:
 

Code :
  1. static Random r = new Random();
  2.  
  3. static char randomChar(String pattern) {
  4.     int min = pattern.charAt(0), max = pattern.charAt(2);
  5.     return (char) (min + r.nextInt(max-min+1));
  6. }



 
C'est mieux les ArrayList ?
 
(Pas dans ce cas précis mais en général quand on doit utiliser une List)


---------------
.
Reply

Marsh Posté le 22-10-2009 à 15:55:05    

Oui ArrayList est sensé remplacer Vector. Cette classe n'est pas synchronisée par défaut.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed