StringTokenizer, ou est le problem ? :/

StringTokenizer, ou est le problem ? :/ - Java - Programmation

Marsh Posté le 13-04-2004 à 09:13:24    

:hello: ,
j ai le fichier suivant :

Code :
  1. james      12
  2. paul       2
  3. ginette    85
  4. roxxor     47


 
je veus recuperer le meileur score du fichier.
pour cela mon idee serait de prendre tout les chiffre , les mettre dans arraylist et en ressortir le plus grand.
 
la ou sa coince c est pour mettre les chiffres dans l ArrayList
voila ce que j ai fais :

Code :
  1. private ArrayList storeData;
  2. private ArrayList getScores() {
  3. scoresData = new ArrayList();
  4. BufferedReader  fileIn = null;
  5. try {
  6.  fileIn = new BufferedReader(new FileReader(file));
  7.  String delim = "\t";
  8.  String line;
  9.  while ((line= fileIn.readLine())!=null)
  10.  {
  11. StringTokenizer st = new StringTokenizer(line,  delim);           scoresData.add(Integer.parseInt(st.nextToken()));
  12.      
  13. //c est la que j ai une erreur  
  14. //The method add(int, Object) in the type ArrayList is not applicable  
  15. //for the arguments (int)
  16.  }
  17. }
  18. catch (IOException e)
  19. {
  20.   //blabla
  21. }
  22. return scoresData;
  23. }


comment pourai je faire  ??     [:dams86]  
merci.

Reply

Marsh Posté le 13-04-2004 à 09:13:24   

Reply

Marsh Posté le 13-04-2004 à 09:21:31    

lire le message d'erreur? Tu essaies d'ajouter un entier (int) dans une arraylist.  
 
Enlève le Integer.parseInt

Reply

Marsh Posté le 13-04-2004 à 09:22:43    

xiluoc a écrit :


//The method add(int, Object) in the type ArrayList is not applicable  
//for the arguments (int)


http://java.sun.com/j2se/1.4.2/doc [...] ng.String)
 
Il faut utiliser un Interger et pas un int quand tu veux un Object.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 13-04-2004 à 09:23:54    

DarkLord a écrit :

lire le message d'erreur? Tu essaies d'ajouter un entier (int) dans une arraylist.  
 
Enlève le Integer.parseInt


ouai je viens de tester comme ca : scoresData.add(st.nextToken());
mais sa prend le premier morceau : le nom.
je voudrais seulement la 2ieme partie : le score.
 
scoresData.add(st.nextToken(st.nextToken()));
ne marche pas.

Reply

Marsh Posté le 13-04-2004 à 09:28:07    

et bien tu lis la doc parceque java < 1.5 fait pas d'auto-boxing, faut donc que tu lui donne un Integer et pas un int

Reply

Marsh Posté le 13-04-2004 à 09:32:26    

oui j ai vu ca, ca marche maintenant.
hum je pense que si je fais

Code :
  1. if (hasMoreToken()==false) {
  2. scoresData.add(st.nextToken()); }


ca vas marcher =)
 
edit :
mais si jai une ligne de 15 token et que je veus le 8 ieme ? je serai donc obliger ne mettre un compteur ?
edit : arf j avais mis une annerie


Message édité par xiluoc le 13-04-2004 à 10:46:36
Reply

Marsh Posté le 13-04-2004 à 09:35:10    

xiluoc a écrit :


ouai je viens de tester comme ca : scoresData.add(st.nextToken());
mais sa prend le premier morceau : le nom.
je voudrais seulement la 2ieme partie : le score.
 
scoresData.add(st.nextToken(st.nextToken()));
ne marche pas.


 
pour avoir le deuxieme ...
st.nextToken(); scoresData.add(st.nextToken());

Reply

Marsh Posté le 13-04-2004 à 09:35:58    

essaie déjà de ne pas faire 30 choses différentes dans la meme instruction. Essaie de découper ce que tu dois faire en plusieurs méthodes.

Reply

Marsh Posté le 15-04-2004 à 11:59:38    

darklord a écrit :

essaie déjà de ne pas faire 30 choses différentes dans la meme instruction. Essaie de découper ce que tu dois faire en plusieurs méthodes.


 
Moi je ferais une classe Parser qui :

  • analyse ton fichier  
  • renvoie une List (ArrayList ou Vector) qui contient des objets qui correspondant aux paires nom/score.


Avec ça tu peux trier la liste de retour (méthode sort() qui prend un Comparator) par ordre décroissant sur les score. L'élément 0 de la liste est l'objet nom/score qui contient le score le plus grand (et tu as même le nom avec).


Message édité par pascal34 le 15-04-2004 à 12:10:08
Reply

Marsh Posté le 15-04-2004 à 12:02:19    

Ca ne sert a rien de stocker tout les scores dans une liste pour ensuite chercher le plus grand.
Il suffit juste de stocker le max et de verifier ensuite a chaque ligne si le score acteullement lu est plus grand que le score max stocké.


---------------
Light is right
Reply

Marsh Posté le 15-04-2004 à 12:02:19   

Reply

Marsh Posté le 15-04-2004 à 12:16:15    

S'il se contente de sortir le score max et que plus tard il a aussi besoin du nom il faudra réanalyser le fichier (et dupliquer le code).
 
Là c'est fait une fois et il a toutes les infos dont il a besoin et dont il aura peut-être besoin.
 
Il vaut mieux séparer les tâches.


Message édité par pascal34 le 15-04-2004 à 12:18:14
Reply

Marsh Posté le 15-04-2004 à 13:42:01    

Pour ton info il est mieux d'utiliser la fonction split que la fonction StringTokeniser tel que spécifié dans l'API :
 
"StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split  method of String or the java.util.regex package instead."

Reply

Marsh Posté le 15-04-2004 à 13:58:30    

ok, j essayerai les regex

Reply

Sujets relatifs:

Leave a Replay

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