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

  FORUM HardWare.fr
  Programmation
  Java

  [Java] java.util.Random pas si random que ça :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] java.util.Random pas si random que ça :(

n°951132
glod 2
Votre trajet, notre projet.
Posté le 11-01-2005 à 20:45:49  profilanswer
 

Hello tous,
 
j'ai un petit problème avec mes chiffres sortis avec la classe Random.
En effet, je génère des noms à partir d'une base de donnée de noms et de prénoms, je tire donc un nom et un prénom que j'assemble.
Le problème c'est que la base fait 300 prénoms * 300 noms, donc preque 100k possibilités et que j'ai déja DES couples identiques. Comme vous allez le voir dans mon code ma méthode est statique, est-ce une possible cause du problème ?
C'est la première fois que je l'etilise (Random), donc pê je fais pas les choses bien ?
Voici le code :
 

Code :
  1. /**
  2.      *Renvoie un nom généré aléatoirement parmis la base de noms et de prénoms.
  3.      */
  4.     public static String getAName() {
  5.         Connection con = null;
  6.         Statement st = null;
  7.         ResultSet rs = null;
  8.         String[] catcount = null;
  9.         Random rnd = new Random();
  10.        
  11.         try {
  12.             con = Pool.getInstance().getConnection();
  13.             //connexions et récupération du nombre d'enregistrement des             tables
  14. //noms = nombre de noms dans la base
  15. //prenoms = nombre de prénoms dans la base
  16.            
  17.             noms = rnd.nextInt(noms - 1) + 1;
  18.             prenoms = rnd.nextInt(prenoms - 1) + 1;
  19.            
  20.             if(debug)
  21.                 System.out.println(noms);
  22.             if(debug)
  23.                 System.out.println(prenoms);
  24.            
  25.             nbNoms = "SELECT * FROM NOM ORDER BY NOM";
  26.             nbPrenoms = "SELECT * FROM PRENOM ORDER BY PRENOM";
  27.            
  28. //obligé de boucler dans les resultset jusqu'au chiffre tiré aléatoirement, drivers supportent pas les resultset scrollables (absolute()...)
  29.             rs = st.executeQuery(nbPrenoms);
  30.             while(i <= prenoms && rs.next()){
  31.                 if(i == prenoms)
  32.                     nom = rs.getString(1).trim();
  33.                 i++;
  34.             }
  35.            
  36.             if(debug)
  37.                 System.out.println(nom);
  38.            
  39.             i = 0;
  40.             rs = st.executeQuery(nbNoms);
  41.             while(i <= prenoms && rs.next()){
  42.                 if(i == prenoms)
  43.                     nom += " " + rs.getString(1).trim();
  44.                 i++;
  45.             }
  46.            
  47.             return nom;
  48.            
  49.         } catch (SQLException sqle) {
  50.             //....
  51.             return null;
  52.         } finally {
  53. //....fermetures des connexions...
  54.             } catch(SQLException s) {}
  55.         }
  56.     }


une idée ?
Là je suis sur le point de tirer 100 int aléatoires, les foutre dans un tableau, et tirer aléatoirement l'index mais bon c suppra lourd pour un traîtement qui se répète en boucle assez souvent...
 
edit : oui je sais dans cette méthode mes noms de variable sont pas très heureux [:joce]


Message édité par glod 2 le 11-01-2005 à 20:53:07
mood
Publicité
Posté le 11-01-2005 à 20:45:49  profilanswer
 

n°951358
glod 2
Votre trajet, notre projet.
Posté le 12-01-2005 à 00:48:12  profilanswer
 

premier up avant les soldes :o

n°951379
the real m​oins moins
Posté le 12-01-2005 à 01:38:14  profilanswer
 

t'as lu la javadoc de Random? si je me souviens bien, il est expliqué noir (ou bleu?) sur blanc ce que tu dois faire.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°951435
bobuse
Posté le 12-01-2005 à 09:41:21  profilanswer
 

Tu dois instancier ton générateur à l'extérieur de la boucle !!
Car sinon, la suite est regénéré à chaque fois ! Ta fonction doit s'effectuer rapidement, donc les suites générées sont régulièrement identiques.
 
Il faut donc que ton Random soit un argument de la fonction et soit initialisé une fois avant de boucler sur ta fonction.
 
Par ailleurs, le générateur de java a mauvaise réputation mais pour ton cas, ça devrai suffire ;)


---------------
get amaroK plugin
n°951439
simogeo
j'ai jamais tué de chats, ...
Posté le 12-01-2005 à 09:50:14  profilanswer
 

Glod 2 a écrit :


 Sujet : [Java] java.util.Random pas si random que ça :(


 
 
Pas si random ou pas si util ?  [:southpark1]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°951541
glod 2
Votre trajet, notre projet.
Posté le 12-01-2005 à 12:29:36  profilanswer
 

bobuse a écrit :

Tu dois instancier ton générateur à l'extérieur de la boucle !!
Car sinon, la suite est regénéré à chaque fois ! Ta fonction doit s'effectuer rapidement, donc les suites générées sont régulièrement identiques.
 
Il faut donc que ton Random soit un argument de la fonction et soit initialisé une fois avant de boucler sur ta fonction.
 
Par ailleurs, le générateur de java a mauvaise réputation mais pour ton cas, ça devrai suffire ;)


ben il est pas dans une boucle mais dans une méthode là, mais je suppose que ça reviens au même, ok je vais lui passer un seed comme argument ça devrait aller mieux, m'enfin ça se mort là queue, le seed si jle mets en dur j'aurai toujours la même séquence et si j'en fais un random.... :D

n°951599
glod 2
Votre trajet, notre projet.
Posté le 12-01-2005 à 13:20:19  profilanswer
 

Ah ben jvais me servir du System.currentTimeMillis() pour mon seed :jap:

n°951637
bobuse
Posté le 12-01-2005 à 14:12:57  profilanswer
 

Glod 2> Heu attends là :heink:  
Ta fonction, elle sert juste à récupérer au hasard un nom ? ok ?
Le truc, c'est que tu l'appelles plusieurs fois pour avoir plusieurs nom tirés au hasard ? non ?
Et ton problème et que tu as beaucoup de nom tirés qui sont les mêmes ?
 
bon, donc si je ne me suis pas trompé, ta fonction getAName() est appelée dans une boucle ?
 
Par ailleurs Java utilise déjà l'horloge comme seed je crois ;)


---------------
get amaroK plugin
n°951647
SomeBugsIn​Me
life suxx
Posté le 12-01-2005 à 14:22:32  profilanswer
 

crée 1 fois ton Random avant de faire la boucle d'appels à getAName() comme le dit bobuse.
 

n°952193
bobuse
Posté le 13-01-2005 à 10:26:02  profilanswer
 

SomeBugsInMe a écrit :

crée 1 fois ton Random avant de faire la boucle d'appels à getAName() comme le dit bobuse.


J'aime quand on m'écoute :sol:


---------------
get amaroK plugin
mood
Publicité
Posté le 13-01-2005 à 10:26:02  profilanswer
 

n°952635
glod 2
Votre trajet, notre projet.
Posté le 13-01-2005 à 20:13:28  profilanswer
 

Vivi j'ai fait ça, je vous tiens au courant des résultats.


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

  [Java] java.util.Random pas si random que ça :(

 

Sujets relatifs
eclipse et annotations de java 5[Java]Mysql+jtextarea+CR
[JAVA] RMI : Le serveur peut-il exécuter une fonction cliente ?Ou telecharger la java doc?
[java] Problème avec les variablesC++ et java
[Java] Besoin d'aide pour petits progs de debutante[Java] Utilisation d'un vecteur d'objets
[JAVA] package javax.servlet does not existTres belles pages en Java : lib utilisée?
Plus de sujets relatifs à : [Java] java.util.Random pas si random que ça :(


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