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 :

La valeur récupérée n'est pas celle insérée (collection)


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 86
    Par défaut La valeur récupérée n'est pas celle insérée (collection)
    Bonjour,

    mon problème est le suivant : lorsque je récupère une valeur dans ma collection je constate que c'est pas la même que j'ai inséré .

    j'utilise la collection HashMap avec comme clé un string et comme valeur un tableau d'entier. voici mon code :

    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
    38
    39
    40
    41
    42
    43
     
    public class Dictionnaire implements Serializable{
     
        private HashMap table_cles;
     
        public Dictionnaire()
        {
            this.table_cles = new HashMap();
        }
     
        public boolean set(String nom, int[] cle)
        {
            if(this.table_cles.containsKey(nom) == false)
            {
                this.table_cles.put(nom, cle);
                return true;
            }
            else return false;
        }
     
        public int[] get(String nom)
        {
            if(this.table_cles.containsKey(nom))
            {
                return (int[])this.table_cles.get(nom);
            }
            else return null;
        }
     
        public void Remove(String nom)
        {
            this.table_cles.remove(nom);
        }
     
        public void RemoveAll()
        {
            this.table_cles.clear();
        }
     
        public int Size()
        {
            return this.table_cles.size();
        }
    dans une autre classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //....
    dico.set(mapkey, tab);
    for(int i = 0; i < tab.length; i++)
          System.out.print(tab[i]);
    //...
    //je fait quelque traitements 
    //et je récupère la mapkey, saisi par l'utilisateur (la même)
    tab= dico.get(mapkeyuti);
    System.out.println("");
    for(int i = 0; i < tab.length; i++)
             System.out.print(tab[i]);
    sortie console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    0001111001110010
    1001010001111011
    le résultats des deux boucle for est différent! quelqu'un pourrait-il m'éclairer?

    merci à bientôt.

  2. #2
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    On peut voir les "quelques traitements" ?

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Il n'y a rien d'étonnant !

    Ta variable ta a une certaine valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dico.set(mapkey, tab);
    for(int i = 0; i < tab.length; i++)
          System.out.print(tab[i]);
    Puis tu affecte à ta variable tap une valeur provenant dun clé saisie par l'utilisateur. Cette clé saisie par l'utilisateur a très peu de chance d'être exatement la même que ce qui a renvoyé ton 1er tab.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tab= dico.get(mapkeyuti);
    System.out.println("");
    for(int i = 0; i < tab.length; i++)
             System.out.print(tab[i]);

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par oneagaindoguys Voir le message
    Cette clé saisie par l'utilisateur a très peu de chance d'être exatement la même que ce qui a renvoyé ton 1er tab.
    Je citerais ce passage du code :
    Citation Envoyé par wassim_boy
    //et je récupère la mapkey, saisi par l'utilisateur (la même)
    Je suppose donc que le problème vient davantage des traitements que tu fais que de la clé (car pour ton test, je suppose que tu as bien fais attention d'avoir mapkey et mapkeyuti identiques).
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 86
    Par défaut
    je le confirme je rentre la même clé. je vais détailler plus mon problème.

    au fait l'utilisateur charge un fichier je dois modifier ses octets en utilisant le tableau tab et j'enregistre le nouveau fichier en rajoutant la mapkey au nom du nouveau fichier sans oublier d'insérer le tableau dans le HashMap ensuite je ferme mon application. la fermeture de l'application implique la sérialisation du dictionnaire et bien sûr à l'ouverture je le déserialise. pour retrouver le fichier de départ je récupère la mapkey pour avoir le tableau qui me permettra de générer le fichier de base.

    c'est en cliquant sur un bouton (valider) que je lance ces traitement. étant donné que j'ai une barre de progression j'utilise le swingworker et c'est dans celui la ou il y a le code qui effectue l'enregistrement des fichiers et l'insertion/récupération du tableau.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public class Traitement extends JDialog {
        private JProgressBar progressBar;
        private JLabel edition;
        public Dictionnaire dico;
     
        /** Creates new form Traitement */
        public Traitement(java.awt.Frame parent, boolean modal) {
            super(parent, modal);
            initComponents();
            //....
            this.dico = this.Deserialiser();
        }
     
    //.......
     
    private void ValiderActionPerformed(java.awt.event.ActionEvent evt) {
        MonSwingWorker swingWorker;
        if(this.newbox.isSelected())
        {
            swingWorker = this.new MonSwingWorker(0, this.chemin.getText());
            swingWorker.execute();
        }
        else if(this.oldbox.isSelected())
        {
            swingWorker = this.new MonSwingWorker(1, this.chemin.getText());
            swingWorker.execute();
        }
        else
            JOptionPane.showMessageDialog(this,"Vous deveriez faire un choix entre crypter "
                    + "et décrypter en cochant une case.",
                        "Erreur", JOptionPane.ERROR_MESSAGE);
     
    }
     
    //......
     
    private class MonSwingWorker extends SwingWorker<Integer, String> 
    {
        private int choix;
        private String path;
        public MonSwingWorker(int c, String p) {
            this.choix = c;
            this.path = p;
            /* On ajoute un écouteur de barre de progression. */
            //.....
        }
     
        //fonctions doInBackground, process et done
        //.....
    je rajoute que une première fois je charge un fichier j'insere mon tableau et je le modifie en cliquant sur le bouton valider et la deuxième fois je charge le fichier précédemment crée je récupère mon tableau et je modifie le fichier.

    donc voila je comprend pas pourquoi je me retrouve avec un autre tableau complétement différent. je précise que je rentre la même clé et j'ai le même problème si j'utilise pas la sérialisation.

    merci pour vos réponse
    à bientôt.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 86
    Par défaut
    j'ai enlevé le swingworker et j'ai mis le code de la fonction traitement dans le actionperformed du bouton validé mais j'ai toujours le même problème.

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Citation Envoyé par wassim_boy Voir le message
    je le confirme je rentre la même clé. je vais détailler plus mon problème.
    Je n'avais pas compris ça comme ça.

    Dans ce cas je cas je rejoint SucreGlace et thelvin sur le fait que tu dois bouger quelque chose dans ton tableau dans tes traitements

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

Discussions similaires

  1. La somme de valeurs numeriques n'est pas celle que j'attends.
    Par jeanphi45 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 02/04/2010, 17h19
  2. Réponses: 0
    Dernier message: 09/09/2009, 22h06
  3. Réponses: 5
    Dernier message: 31/03/2008, 16h30
  4. Réponses: 2
    Dernier message: 20/09/2006, 08h58
  5. Trouver une valeur qui n'est pas dans un champ
    Par eric41 dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/05/2006, 16h48

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