[JAVA][débutant] Valeur aléatoire et poids

Valeur aléatoire et poids [JAVA][débutant] - Java - Programmation

Marsh Posté le 17-03-2005 à 14:24:44    

Bonjour,
 
j'essaye de dev un script qui me permettrait de selectionner une valeur aléatoire en prenant compte de son poids.  
 
Je m'explique :  
J'ai dans un fichier texte :  
 
Valeur1||10  
Valeur2||1  
Valeur3||4  
 
En suivant les poids des valeurs, la Valeur1 devrait sortir plus fréquement que la Valeur3 qui elle même sortira plus fréquement que la Valeur2.  
 
D'après ce qu'on m'a dit, il faut que je fasses la somme de tous les poids et que tu tires un nombre entre zero et cette somme - 1.  
 
Et Ensuite, attribuer a chaque valeur un interval correspondant a son poids :  
 
de 0 à 9 : valeur 1  
de 10 à 10 : valeur 2  
de 11 à 14 : valeur 3
 
Pour la somme j'y suis arrivé, par contre je bloque au moment de faire correspondre la valeur rand issue du random à une des valeur de mon fichier texte :  
 

Code :
  1. String nomFic = "fichier.txt";
  2. FileReader fr = new FileReader(nomFic);
  3. BufferedReader buf = new BufferedReader(fr);
  4.      
  5. String ligne = buf.readLine();
  6. int total = 0;
  7.      
  8. while (ligne != null) {
  9.    StringTokenizer st = new StringTokenizer(ligne, "||" );
  10.    String[] val = new String[2];
  11.    int i=0;
  12.    while(st.hasMoreElements()){
  13.      val[i] = st.nextToken();
  14.      i++;
  15.    }
  16.    int poids= Integer.parseInt(val[1]);
  17.    total += poids;
  18.          
  19.       ligne = buf.readLine();
  20. }
  21.      
  22. int rand= (int)Math.floor(Math.random()*(total-1));
  23. System.out.println(rand);
  24. // Faire correspondre la valeur de rand à une dés valeur de mon fichier ...  
  25.      
  26. fr.close();


 
Dans mon fichier j'ai :  
Valeur1||10  
Valeur2||1  
Valeur3||4  
 
Dans si rand = 10, je devrais avoir la valeur Valeur2.  
 
Qq'un aurait une idée sur comment je peux faire pour avancer ?  
 
Merci d'avance


Message édité par yobogs le 17-03-2005 à 14:26:49
Reply

Marsh Posté le 17-03-2005 à 14:24:44   

Reply

Marsh Posté le 18-03-2005 à 08:50:50    

débutante aussi, je mettrais ((Math.random()*total)-1),ainsi, tu retires 1 après avoir randomisé.....

Reply

Marsh Posté le 18-03-2005 à 16:19:11    

ese-aSH je te remercie pour ta réponse par contre j'me casse la tête depuis hier mais g du mal a trouver comment integrer tes conseils dans mon script :/
 
comme c quasiment mon premier script java, je patauge ;)
 
G du mal à saisir pkoi rajouter int[] values alors que val[0] me donne cette valeur et g du mal à comprendre où mettre  
Random r = new Random();  
int rand = r.nextInt(total);  
int i = 0;  
while (poids[i]<rand) {i++}  
 
D'avance Merci

Reply

Sujets relatifs:

Leave a Replay

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