IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Pb de lancement de programme


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut Pb de lancement de programme
    Bonjour

    Je suis de faire un programme qui permet de comptabiliser le nombre d'occurrence d'un mot à partir d'un fichier texte.

    Je stocke chaque mot dans un HashMap avec la clé = mot et la valeur =nbre d'apparition.

    Je lance mon programme et ça fonctionne mais il ya un message d'erreur

    Le mot lady figure 4 fois
    Exception in thread "main" java.util.NoSuchElementException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:796)
    at java.util.HashMap$EntryIterator.next(HashMap.java:834)
    at java.util.HashMap$EntryIterator.next(HashMap.java:832)
    at tp3javaEx2.Mots.afficherMap(Mots.java:60)
    at tp3javaEx2.Main.main(Main.java:38)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 1 second)
    si quelqu'un peut m'aider à résoudre ce problème.
    Voici mon code de remplissage et de l'affichage de la map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public void remplirMap(){
            try
            {
                 f=new FileWordReader("story.txt");
     
            }catch (FileNotFoundException e){
                System.out.println ("KO! File not found!");
            }
            String word = f.getNextWord();
     
            while (word != null){
                   if(m.containsKey(word)){
     
                       nbreutilisation+=1;
     
                   }
                   else{
                   nbreutilisation=1;m.put(word, nbreutilisation);
                   }
                   m.put(word,nbreutilisation);
                   word=f.getNextWord();
            }
        }
     
        public void afficherMap(){
     
            Set<Map.Entry<String,Integer>> entre = m.entrySet();
            Iterator<Map.Entry<String,Integer>> iter=entre.iterator();
     
            while(iter.hasNext()){
             String mot = (String)iter.next().getKey();
             Integer nbredefois=(Integer)iter.next().getValue();
     
          System.out.println("Le mot " + mot + " figure " +nbredefois + " fois");
     
            }
        }
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Tout d'abord, utilise la balise [code], ça sera plus lisible.

    Ensuite, comme l'indique pourtant très clairement le message de l'exception : tu effectues un next() sur un Iterator de Hashmap alors qu'il n'y a pas d'élément à lire (NoSuchElementException).

    En regardant un peu le code, on repère très rapidement les deux lignes pouvant être concernées (et toi qui a le code source, il te suffit d'aller directement à la ligne 60 de Mot.java pour savoir précisément de quelle ligne il s'agit !).
    Et on se rend compte alors que certes, tu testes la présence d'autres éléments à lire avec hasNext(), mais ensuite tu effectues deux next() de suite (d'ailleurs c'est très curieux, tu lis la clé d'un élément puis la valeur du suivant... cherchez l'erreur...), et donc je te parie que la ligne 60 est la deuxième ligne

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en fait tu as un problème tout bête tu appelles deux fois la méthode next() de ton iter, une fois pour récupérer la clef, une fois pour récupérer la valeur.
    Donc, au lieu d'avancer d'une position dans l'itérateur à chaque tour de boucle tu avances de deux positions, les valeurs que tu affiches ne correspondent pas à ta clef (pour l'instant tu affiches la valeur qui est en position 1 dans ta HashMap avec la clef qui est en position 0).
    Puis en plus pour peu que tu ais un nombre impair d'entrées dans ta Map, beh Boum, tu fais un next alors qu'il n'y a plus rien derrière.

    Bref en faisant ceci, ton problème devrait disparaître
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     while(iter.hasNext()){
          Map.Entry entry = iter.next();
          String mot = (String)entry.getKey();
          Integer nbredefois=(Integer)entry.getValue();
     
          System.out.println("Le mot " + mot + " figure " +nbredefois + " fois");
     }

    [Edit]Grilléééé[/edit]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    Ah oui, que suis je bête
    Une fois les résultats affichés
    Comment dois je procéder pour récupérer les 20 mots qui sont les plus présents dans mon texte?

Discussions similaires

  1. pile corrompue dès le lancement du programme
    Par YéTeeh dans le forum C++
    Réponses: 4
    Dernier message: 24/04/2006, 14h10
  2. Créer un object au premier lancement du programme ?
    Par david06600 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2006, 12h04
  3. Réponses: 1
    Dernier message: 30/11/2005, 23h14
  4. Delphi 2005 Indy 9 Erreur au lancement du programme
    Par Houben Jacques dans le forum Web & réseau
    Réponses: 4
    Dernier message: 08/11/2005, 12h05
  5. [DCOM] Accès refusé au lancement du programme à distance
    Par raoulmania dans le forum Web & réseau
    Réponses: 7
    Dernier message: 22/06/2005, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo