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

Java Discussion :

problem method remove()


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut problem method remove()
    Bonjour a tous,

    Mon exercise me donne un faut code que je dois corriger. Je dois retirer d'un set tous les etudiants ayant un resultat de -1.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void removeFails() // cette methode est incorrecte
       {
          int resultsExam;
          for (String name: students.keySet())
          {
             resultsExam = this.students.get(name).getExamMark();
             if (resultsExam == -1)
             {
                students.remove(name);
             }
          }
    Maintenant je sais que l'on ne peut pas utiliser la method remove() sur un key.Set(), mais je ne vois pas comment approcher le problem differement

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Bonjour,

    Pour pouvoir supprimer des éléments d'une Map, il faut utiliser un Iterator.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	Iterator<String> it = students.keySet().iterator();
    	while (it.hasNext()) {
    		String name = it.next();
    		....
    	}

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Citation Envoyé par eric39 Voir le message
    Bonjour,

    Pour pouvoir supprimer des éléments d'une Map, il faut utiliser un Iterator.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	Iterator<String> it = students.keySet().iterator();
    	while (it.hasNext()) {
    		String name = it.next();
    		....
    	}
    Il utilise le for étendu, ce qui revient à utiliser l'itérateur non ?
    Je pense surtout que le problème ici est un ConcurrentModificationException. Tu peux utiliser une ConcurrentMap ou alors reconstruire une nouvelle Map au fur et à mesure.

    A plus

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Salut,

    Citation Envoyé par George7 Voir le message
    Salut,



    Il utilise le for étendu, ce qui revient à utiliser l'itérateur non ?
    Je pense surtout que le problème ici est un ConcurrentModificationException. Tu peux utiliser une ConcurrentMap ou alors reconstruire une nouvelle Map au fur et à mesure.
    Je suis d'accord pour le for étendu.
    En effet, le problème est bien une ConcurrentModificationException, mais l'Iterator solutionne ce genre de problème.
    J'aurais du ajouter la totalité du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Iterator<String> it = students.keySet().iterator();
    while (it.hasNext()) {
    	String name = it.next();
    	resultsExam = this.students.get(name).getExamMark();
    	if (resultsExam == -1) {
    		it.remove();
    	}
    }
    On peut comme celà accéder à l'intance de l'Iterator et faire un remove sur l'Iterator ce qui solutionne la ConcurrentModificationException.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ok si tu utilises le remove de l'iterator et pas celui de la Map...

  6. #6
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut problem remove
    Merci a tous pour votre reponse

    Je suis desole j'ai oublier de preciser que dans l'exercice ils precisent de garder le foreach loop

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme methode repaint()
    Par cybercrisp dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 24/10/2006, 23h21
  2. [FLASH 8] Probleme méthode send de LoadVars
    Par dom_dev dans le forum Flash
    Réponses: 11
    Dernier message: 26/09/2006, 12h07
  3. Réponses: 2
    Dernier message: 23/08/2006, 15h47
  4. probleme methode="post"
    Par ardamus dans le forum Langage
    Réponses: 8
    Dernier message: 01/03/2006, 11h30
  5. Probleme Methode POST
    Par pidu dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/02/2006, 17h33

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