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 :

Gestion d'une collection


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut Gestion d'une collection
    Bonjour à tous,


    Afin d'améliorer mes compétences, je fais quelques exercices trouvés à droite et à gauche sur le net.
    L'exercice que je suis en train de traiter est la répartition du nombre de siéges lors d'une élection (exercice récupéré sur ce site). Pour cela le programme demande à l'utilisateur d'entrer le nombre de siéges disponibles, le nombre de listes électorales et pour chaque liste son nom et nombre de voix.
    J'ai donc créé en plus de la classe principale, une class ListeElectorale ayant pour attributs un nom (nom), un nombre de sièges (nbrSieges) et un nombre de voix (nbrVoix). Le nom et le nombre de voix sont définit lors de l'instanciation(ça existe vraiment ça?) de l'objet.

    POur cela je passe par une classe CollectionDeListe qui hérite de l'objet Hashtable.
    Sa déclaration est pour l'instant toute simple puisque qu'elle ne redéfinie aucune méthode.

    Afin de remplir cette CollectionDeListe, j'ai procédé ainsi :

    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
    System.out.println("Veuillez entrer le nombre de listes électorales");
    nbrListes = Integer.parseInt(sc.nextLine());
     
    System.out.println("Veuillez entrer le nombre de siéges disponibes");
    nbrSieges = Integer.parseInt(sc.nextLine());
     
    //récupération des infos des différentes listes
    for (int i=0;i<=nbrListes;i++){
    	System.out.println("Veuillez entrer le nom liste" + i);
    	nom = sc.nextLine();
     
    	System.out.println("Veuillez entrer le nombre de voix de la liste" + i);
    	nbVoix = Integer.parseInt(sc.nextLine());
    	nbrSuffragesTotal += nbVoix;
     
    	collecListes.put(new ListeElectorale(nom,nbVoix));
    }
    Le probléme est que je n'arrive pas à récuperer les objets situés dans la table de hashage.
    Morsque je fais un
    liste = collecListes.get(i); ou liste un objet de type ListeElectorale, Eclipse me notifie que Type mismatch: cannot convert from Object to ListeElectorale.
    Or si je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(collecListes.get(i).getClass());
    c'est bien la classe ListeElectorale qui est retournée...

    Quelqu'un pourrait m'expliquer pourquoi cette erreur et comment la corriger?

    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
    Citation Envoyé par Micke7 Voir le message
    Le probléme est que je n'arrive pas à récuperer les objets situés dans la table de hashage.
    Morsque je fais un liste = collecListes.get(i); ou liste un objet de type ListeElectorale, Eclipse me notifie que Type mismatch: cannot convert from Object to ListeElectorale.
    Or si je fais un System.out.println(collecListes.get(i).getClass()); c'est bien la classe ListeElectorale qui est retournée...

    Les collections contiennent des Object, qui peuvent en fait être n'importe quelle classe...
    Donc lorsque tu fais un collecListes.get(i) tu récupères un Object. Toi tu sais que dans collecListes tu n'as mis que des ListeElectorale, mais le compilateur ne le sait pas. Il faut que tu "castes" (franglais) ton objet dans le type que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeElectorale liste = (ListeElectorale) collecListes.get(i);
    Si en fait l'Object récupéré dans collecListes n'était pas un ListeElectorale tu auras une erreur au moment de l'exécution.


    En ce qui concerne le résultat donné pas le getClass() : c'est encore au moment de l'exécution que ton programme peut connaître le type réel de l'Object récupéré dans collecListes.



    EDIT
    Si tu as Java 1.5 tu pourras ensuite t'intéresser aux types génériques : ça te permettra de créer des collections qui déclarent explicitement qu'elles ne contiennent que des objets de type ListeElectorale, par exemple

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Merci pour la réponse, et comme tu l'a rappelé, il existe la généricité, chose que j'ai donc utilisée .

    Bon réveillon

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

Discussions similaires

  1. [AC-2007] Gestion d'une collection de plantes
    Par didier bamford dans le forum Modélisation
    Réponses: 6
    Dernier message: 11/12/2013, 23h25
  2. Gestion d'une multitude de collection
    Par aoking dans le forum Général VBA
    Réponses: 2
    Dernier message: 09/09/2011, 14h11
  3. gestion d'une collection d'objets dynamiques
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/03/2009, 10h13
  4. Gestion d'une collection/BDD
    Par mcorvaisier dans le forum Windows Forms
    Réponses: 0
    Dernier message: 13/01/2009, 15h40
  5. Problème de gestion d'une collection d'objet
    Par poolky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/02/2006, 21h51

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