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 :

Question sur les HashMap


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Question sur les HashMap
    Bonjour,

    J'aimerais faire une application qui modélise un QCM (question à choix multiples) et j'ai eu l'idée de mettre les réponses dans une HashMap dont les (values) sont des réponses (String) et les (key) sont des booléens (réponse vraie ou non).

    Quelqu'un saurait-il m'indiquer comment faire pour associer ces réponses à une question ?

    Sinon, est-il est possible de faire une HashMap de HashMap en Java ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Avec la méthode Map.get(clef), tu peux obtenir la valeur assiocée à la clef passée en paramètre.

    Oui, on peut faire une Map dont les valeurs sont des HashMap (ou n'importe quoi d'autre en fait).

    On pourrait faire une Map avec des HashMap en clefs, mais il faut que la clef soit immutable dans la plupart des cas (en particulier pour une HashMap), ce qui n'est pas le cas garanti avec une HashMap (on pourrait le garantir en s'assurant de jamais modifier le contenu de la Map après l'avoir utilisé en clef, et que personne ne puisse le faire, si la Map est accessible, en utilisant Collections.unmodifiableMap() par exemple).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 23
    Points : 48
    Points
    48
    Par défaut
    Bonsoir,
    Si l'utilisation de HashMap n'est pas obligatoire, vous pouvez concevoir votre problème autrement.
    Définir deux classes Qestion et Reponse comme suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Question {
     
    	private int id;
    	private String question;
    	private List<Reponse> reponses = new ArrayList<Reponse>();
    }
     
    class Reponse {
     
    	private int id;
    	private String reponse;
    	private boolean juste;
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    J'avais pas remarqué à ma première lecture, mais que ça fonctionne avec une HashMap, il faut mettre les réponses en clefs et les booléens en valeurs. Un map associe une seule instance valeur pour une instance de clef donnée. Donc, si tu mets des booléens en clef, il ne peux qu'il y avoir qu'une seule réponse pour la clef false. Donc à part pour des QCM à 2 propositions, ça ne pourra pas fonctionner.

    Pour ta solution, @jafaaresprit, c'est en effet une possibilité, mais elle oblige à parcourir la liste de réponses pour connaitre celle qui est bonne. On aurait pu faire par exemple (et comme je n'ai pas vu de notion d'id dans la question initiale, on a pas besoin de classe particulière pour modéliser une réponse) :

    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
     
    public class Question {
     
    	private final String question;
    	private final String[] propositions;
            private final int bonneResponse;
     
            public Question(String question, int bonneReponse, String...propositions) {
                  this.question=question;
                  this.propositions = propositions;
                  this.bonneReponse = bonneResponse;
            }
     
            public final int getNbPropositions() {
                 return this.propositions.length;
            }
     
            public final int getQuestion() {
                 return this.question;
            }
     
            public final String getProposition(int index) {
                 return this.propositions[index];
            }
     
            public final String getBonneReponse() {
                 return this.reponses[bonneReponse];
            }
     
            public final boolean estBonneReponse(int indexPropositionChoisie) {
                 return bonneReponse==indexPropositionChoisie;
            }
     
            public final boolean estBonneReponse(String propositionChoisie) {
                 return getBonneReponse().equals(proposition);
            }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 23
    Points : 48
    Points
    48
    Par défaut
    Bonsoir,
    @joel.drigo
    C'est vrai il n'y pas de notion d'id.
    Avec votre solution comment on peut gérer le cas où on a plusieurs bonnes réponses.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jaafaresprit Voir le message
    Avec votre solution comment on peut gérer le cas où on a plusieurs bonnes réponses.
    On ne peut pas. Mais dans un QCM, il y'a généralement, il me semble, qu'une bonne réponse. Sinon on pourrait simplement avoir un tableau de int à la place du int bonneReponse (et/ou utiliser un Set<String>).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    jaafaresprit@ joel.drigo@ merci pour votre aide

    je pense que l'utilisation des listes est plus simple dans cet exercice , mais le problème c'est que je suis obligée d'utiliser les HashMap

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 23
    Points : 48
    Points
    48
    Par défaut
    Bonjour,
    Donc commet il a dit joel.drigo, vous pouvez utiliser HahMap dans un autre HashMap.
    Exemple de 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
     
    import java.util.HashMap;
    public class HashMapTest {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		HashMap<String, Boolean> responses = new HashMap<String, Boolean>();
    		HashMap<String, HashMap<String, Boolean>>questions = new HashMap<String, HashMap<String,Boolean>>();
    		responses.put("reponse1", true);
    		responses.put("reponse2", false);
    		responses.put("reponse3", false);
    		questions.put("question1", responses);
     
    		responses.put("reponse1", false);
    		responses.put("reponse2", true);
    		responses.put("reponse3", false);
    		questions.put("question2", responses);	
                    System.out.println( questions );
    	}
    }
    plus un peut de recherche sur developpez.net ou sur google pour connaitre comment manipuler les HashMap efficacement

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    jaafaresprit@ merci , je vais tester ce code
    merci infiniment pour vos efforts

Discussions similaires

  1. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 14h49
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 03h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 14h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 09h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 17h11

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