Problème Hashmap en java

Problème Hashmap en java - Java - Programmation

Marsh Posté le 31-01-2009 à 17:08:47    

Bonjour,
 
J'essaie de crée une hashmap qui va contenir des couples de mots avec leurs nombre d'occurrence à partir d'une liste de mots.
J'ai un petit soucis sur le nombre d'occurrence qui reste toujours égale à 0. Si quelqu'un a une solution à me proposer je le remercie d'avance.
 
public static Map<String,Integer> occurrencesDesMots(List<String> liste){
      Map<String,Integer> table = new HashMap();
      Iterator it=liste.iterator();
       
      int i;
      int nboccurence;
      for( i=0; i<liste.size(); i++){
         nboccurence=0;
      while(it.hasNext()){
           
         Object o = (Object) it.next();
         Object c = (Object) liste.get(i);
              if(c.equals(o)){
                  nboccurence++;
                   
            }
             
        }
      table.put(liste.get(i),nboccurence);
    }
     
      return table;
}

Reply

Marsh Posté le 31-01-2009 à 17:08:47   

Reply

Marsh Posté le 31-01-2009 à 18:38:05    

Salut à toi
 
tu peux faire plus simple par exemple comme ça :  

Code :
  1. public static Map<String, Integer> occurences(List<String> words) {
  2.  Map<String, Integer> table = new HashMap<String, Integer>();
  3.  for (String word: words) {
  4.   if (!table.containsKey(word))
  5.    table.put(word, 1);
  6.   else
  7.    table.put(word, table.get(word) + 1);
  8.  }
  9.  return table;
  10. }


---------------
Always wear a camera!
Reply

Marsh Posté le 31-01-2009 à 19:02:29    

Merci de ta réponse ca marche nickel.
J'aimerai également savoir ou se trouve la faute dans mon programme, car j'ai beau cherché mais je ne trouve pas ce qui cloche.
Je cherche également une fonction qui me permettrait de supprimer de la liste tous les mots commençant par une string passée en paramètre, mais je n'ai pas d'idée dessus. Quelqu'un aurait-il une petite idée s'il vous plâit?

Message cité 1 fois
Message édité par jaysiat le 31-01-2009 à 20:54:53
Reply

Marsh Posté le 01-02-2009 à 03:06:15    

Quelque chose dans ce genre là devrait suffire ?
 

Code :
  1. public void deletePrefixedWords(List<String> words, String prefix) {
  2.  Iterator<String> it = words.iterator();
  3.  while(it.hasNext()) {
  4.   String word = it.next();
  5.   if(word.startsWith(prefix)) {
  6.     it.remove();
  7.    }
  8.  }
  9. }


C'est une version simplifiée, tu peux t'amuser à rajouter un test sur words != null au début de la méthode, etc ...


---------------
- mon feed-back
Reply

Marsh Posté le 01-02-2009 à 11:49:38    

jaysiat a écrit :

J'aimerai également savoir ou se trouve la faute dans mon programme, car j'ai beau cherché mais je ne trouve pas ce qui cloche.


A l'issue de la 1ère itération de la boucle for (i=0), l'itérateur it est positionné sur le dernier élément de la liste.
Donc pour les itérations suivantes de la boucle for (i=1, i=2, etc), it.hasNext() va renvoyer faux.

Reply

Marsh Posté le 01-02-2009 à 23:07:09    

jaysiat a écrit :


public static Map<String,Integer> occurrencesDesMots(List<String> liste){
      Map<String,Integer> table = new HashMap();
      Iterator it=liste.iterator();
       
      int i;
      int nboccurence;
      for( i=0; i<liste.size(); i++){
         nboccurence=0;
      while(it.hasNext()){
           
         Object o = (Object) it.next();
         Object c = (Object) liste.get(i);
              if(c.equals(o)){
                  nboccurence++;
                   
            }
             
        }
      table.put(liste.get(i),nboccurence);
    }
     
      return table;
}


 
Merci de votre aide, mais la je comprends pas pourquoi l'iterator se place en bout de ma liste.
Ce que je voulais faire c'est prendre dans un premier temps le premier mot de la liste avec liste.get(i) et le comparé avec les mots contenus dans ma l'ensemble de ma liste pour augmenter le compteur d'occurence, puis passer au deuxieme mot et comparer avec la suite des mots ainsi de suite.

Reply

Marsh Posté le 01-02-2009 à 23:12:23    

dans ta boucle for qui itère sur liste tu as une boucle while qui itère aussi sur liste ... c'est pas bon, dailleurs algorithmiquement ça n'a aucun sens
 
une fois que tu sortiras du while, pour toutes les itérations suivantes du for, il ne se passera rien


---------------
- mon feed-back
Reply

Marsh Posté le 07-02-2009 à 12:04:58    

merci bien pour vos réponses.

Reply

Sujets relatifs:

Leave a Replay

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