Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 :


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

il faut que tu mette dans ton fichier :
Valeur1||10||
Valeur2||1||
Valeur3||4

car sinon il prrend comme token Valeur1 10Valeur2 1Valeur3


et dans mon cas il prend bien les differentes valeurs


Essaye deja ca car la je dois aller en cours donc je peux pas regarder longtemps ton probleme

ps:tu as bien fait les try, catch?
Lassé par la pub ? Créez un compte