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

Collection et Stream Java Discussion :

Destruction objet Java + modification HashMap


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut Destruction objet Java + modification HashMap
    Bonjour

    Je suis en mode éponge sur le langage Java en ce moment, et je dois avouer que certaines choses m'échappent, au niveau des meilleures pratiques à adopter.

    Situation :
    J'ai 3 classes qui n'héritent de rien (toutes des classes mères):
    • Instrument
    • Musicien
    • Factory


    Dans ma classe Factory, j'ai :
    • un HashMap d'entiers et de Musiciens
    • un HashMap d'entiers et d'Instruments


    Et également une méthode permettant la suppression d'un Musicien.

    Dans ma classe Musicien, je possède un attribut "perso" de type Instrument. (dans lequel on stockera l'instrument personnel du musicien)

    Dans ma classe Instrument, je possède un attribut "lock" qui vaut "true" si l'instrument en question appartient à un musicien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected boolean lock;
    Problème :
    Lorsque j'appelle ma méthode de suppression d'un musicien, j'entre l'id voulu (entier) et je le supprime de la liste de classe Factory, et j'aimerais conserver son instrument, en remettant l'attribut "lock" de celui-ci à false. (pour qu'il puisse être réaffecté)

    Seulement j'ai beau modifier dans mon HashMap d'instrument à l'id correspondant, il me laisse toujours cet attribut à "true" et je ne peux plus utiliser l'instrument qui a appartenu au musicien supprimé.

    Voici mon code de suppression :
    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
    Saisie hSaisie = new Saisie();
    System.out.println("Veuillez entrer le numéro du musicien à supprimer :");
    int num = hSaisie.saisieInt();
    Main hMain = new Main();
    // si le musicien est trouvé dans la liste
    if (tMusiciens.remove(num) != null) {
    	// liberer l'instrument
    	 hMain.unlock(num);
    	 // on va chercher dans les orchestres
    	... // tout un tas de traitement pas en rapport
    	  System.out.println("Le musicien " + num + " a été supprimé");
    	} else {
    	  System.out.println("Aucun musicien portant le numéro " + num + " n'éxiste dans la liste");
    	}
    return tMusiciens;
    Ici, je pense j'appelle sans problème la méthode du main qui va libérer l'objet voulu.

    Et ici voici le code de hMain.unlock() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void unlock(int id) {
    if (this.tInstruments.containsKey(id)) {
            Instrument tmp = this.tInstruments.get(id);
            tmp.lock = false;
            this.tInstruments.put(id, tmp);
        }
    }
    Je vérifie si l'id existe dans le HashMap, je récupère l'objet, je modifie l'attribut lock, et j'écrase l'objet qui existait avec le même id.

    Quelqu'un aurait-il une idée d’où vient le problème svp ?

    Il n'y a aucune erreur de compilation, et mon programme fonctionne normalement, il y a juste le lock qui ne se modifie pas !

  2. #2
    Membre éclairé
    Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Par défaut
    t'as pas besoin de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.tInstruments.put(id, tmp);
    car tmp est une référence vers l'instrument.

    sinon à première vue je vois pas d’où viens le problème. essaye de debugger avec ton IDE surtout la méthode unlock pour voir. Et si ça se débloque pas n'hésite pas à mettre tes classes en pièces jointes pour qu'on puisse t'aider.

  3. #3
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut Debbuger
    Je viens d'observer mes variables, et il se trouve que dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void unlock(int id) {
    if (this.tInstruments.containsKey(id)) {
            Instrument tmp = this.tInstruments.get(id);
            tmp.lock = false;
        }
    }
    la condition renvoie false dans le if.
    J'ai essayé if(this.tInstruments.get(id) != null) et la condition renvoie false également.

    Pourtant lorsque j'affiche mon HashMap tInstruments, je vois bien des éléments présents correspondants à l'id que je passe en paramètre dans unlock().

    Je suis surement embrouillé mais ça me parait bizarre ...

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Par défaut
    Bonjour,

    Dans ta condition de la méthode unlock tu utilise "this" qui fait appel à ta classe Main si je comprends bien, seulement, tu dis que ta HashMap est dans une classe Factory. Remplace les this de condition et de modification par ta classe Factory.

  5. #5
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Au temps pour moi, ces HashMaps sont contenus dans la classe Main, et je les passe généralement en paramètres pour faire des opérations dans Factory, puis je les retourne dans le main.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Par défaut
    Pourrais tu rajouter le code de création de musicien et d'instrument et les trois classes Factory, Musicien et Instrument.

  7. #7
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Je met en pièce jointe les classes concernées, en espérant que ça sera pas fouillis :

    Merci à tous ceux qui regardent

    NB : Surtout n'hésitez pas à me proposer une autre manière de faire si vous en voyez une plus simple ou plus optimisée, ca ne me dérange pas de tout refaire, je préfère partir sur de bonnes bases avec Java.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. uigetdir : modification d'un objet java
    Par ParkerL31884 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 23/09/2014, 11h00
  2. [Profiling] Mémoire utilisée par objet java
    Par Bicnic dans le forum Général Java
    Réponses: 2
    Dernier message: 05/01/2006, 09h52
  3. [Collections][HashMap]Comparer les objets de la hashmap
    Par rvfranck dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 16/12/2005, 21h29
  4. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  5. [SAX] Passer d'objet java en fichier XML?
    Par spoutyoyo dans le forum Format d'échange (XML, JSON...)
    Réponses: 15
    Dernier message: 05/01/2005, 08h31

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