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

avec Java Discussion :

Comment utiliser un enumeration?


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut Comment utiliser un enumeration?
    Bonjour à tous.
    Alors voilà:
    J'ai une collection sous forme de LinkedHashMap et j'aimerai afficher le contenu de chaque entré. Je sais qu'il faut utilser une enumeration... mais je ne sais comment faire. Si quelqu'un pouvait me donner un petit exemple de code commenté svp!

  2. #2
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    voici un bout de code pour afficher toutes les entrées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
    		Iterator<String> it = map.keySet().iterator();
    		//tant qu'il y a des entrees
    		while(it.hasNext()){
    			//on les affiche
    			System.out.println(it.next());
    		}
    j'espère que ça te convient!
    Docteur en informatique
    Freelance R&D, Web
    Activité freelance : https://redinnov.fr
    Page perso : https://michel-dirix.com/

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup!
    Je vais essayé d'adapter ca a mes objets maintenant.

  4. #4
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    ok tiens moi au courant!
    Docteur en informatique
    Freelance R&D, Web
    Activité freelance : https://redinnov.fr
    Page perso : https://michel-dirix.com/

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut
    euh juste un détail....dans la boucle while quelle est la variable qui contient mon objet contenu dans la collection?it?ou ca fait: ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par djisse Voir le message
    euh juste un détail....dans la boucle while quelle est la variable qui contient mon objet contenu dans la collection?it?ou ca fait: ?
    La méthode next() retourne l'élément et déplace l'itérateur.

    Tu pourrais écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(it.hasNext()){
       String element = it.next();
       //on les affiche
       System.out.println(element);
    }

  7. #7
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2009
    Messages : 138
    Points : 159
    Points
    159
    Par défaut
    c'est la fonction next () qui te renvoie directement l'objet.

    Object next()
    Returns the next element in the iteration.

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 136
    Points
    136
    Par défaut
    http://java.sun.com/j2se/1.5.0/docs/.../Iterator.html

    En l'occurrence, it.next() te renvoie un String correspondant à une clé de ta LinkedHashMap.
    "Je sais que je suis un geek depuis que j'utilise le timer de mIRC pour faire cuire des pâtes"

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut
    Ok merci à tous!
    En fait j'ai utiliser une enumeration, c'est ce que je comprenais le mieux:
    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
    public void afficher_all() throws IOException, ClassNotFoundException
    	{
    	Fichier nouveau=new Fichier();
    	Hashtable liste=new Hashtable();
    	nouveau.ouvrir("Compte.dat","read");
    	nouveau.fermer();
    	liste=(Hashtable) nouveau.lire();
    	for (Enumeration e = liste.keys() ; e.hasMoreElements() ; ) {
            Compte objet=new Compte("how");
            objet=(Compte) e.nextElement();
            System.out.println(objet.id);
            System.out.println(objet.nom_du_client);
            System.out.println(objet.banque);
            System.out.println(objet.type);
            System.out.println(objet.numero_de_compte);
            System.out.println(objet.solde);
            }
    	}
    Vous en pensez quoi? Ca devrait marcher?

  10. #10
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2009
    Messages : 138
    Points : 159
    Points
    159
    Par défaut
    si tu veux utiliser ton enum e plus tard, il faut la déclarer en dehors du for
    De plus, ca fait bizarre un for sans incrément (ou variation de variable) à la fin.

    Un while serait donc plus approprié, mais bon...

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par bého32 Voir le message
    si tu veux utiliser ton enum e plus tard, il faut la déclarer en dehors du for
    Pourquoi faire ???
    Une fois parcouru jusqu'à la fin l'Enumeration est complètement inutile

    Au contraire la déclarer dans le for permet de limiter sa porté et de facilité le travail du GC...

    Citation Envoyé par bého32 Voir le message
    De plus, ca fait bizarre un for sans incrément (ou variation de variable) à la fin.

    Un while serait donc plus approprié, mais bon...
    C'est plutôt une question d'habitude. Il n'y a rien de gênant à cela...




    Ce qui me gène surtout c'est l'utilisation de Hashtable et Enumeration... qui font partie de l'ancienne API
    Une Map et un Iterator me semble plus adapté. En plus cela permettrait d'utiliser le for étendu !

    De même, à moins que tu utilises une vielle version, il faudrait typé ta classe avec les Generics.

    Enfin je ne comprend pas toutes ces créations d'objets inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Hashtable liste=new Hashtable(); // A quoi sert cette Hashtable puisqu'elle est perdu juste après !
       ...
    	liste=(Hashtable) nouveau.lire();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Compte objet=new Compte("how"); // how how how ???
            objet=(Compte) e.nextElement();

    Ceci sans compter le nom de la méthode (pas d'underscore please !!!) et l'accès direct aux attributs sans getter


    a++

    a++

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut
    Merci d'avoir repondu!
    Citation Envoyé par adiGuba Voir le message
    Salut,

    Ce qui me gène surtout c'est l'utilisation de Hashtable et Enumeration... qui font partie de l'ancienne API
    Une Map et un Iterator me semble plus adapté. En plus cela permettrait d'utiliser le for étendu !
    Bah en fait je debute en java, et j'ai appris en utilisant Hashtable et Enum.... donc je sais pas, je connais pas Iterator, et j'arrive pas à le comprendre!

    De même, à moins que tu utilises une vielle version, il faudrait typé ta classe avec les Generics.
    Pourquoi?

    Enfin je ne comprend pas toutes ces créations d'objets inutile :
    Bah en fait la liste est dans un fichier, donc j'utilise une classe que j'ai crée pour gérer les fichier...donc je doit caster ce qui sort de la deserialization ect...

    Ceci sans compter le nom de la méthode (pas d'underscore please !!!) et l'accès direct aux attributs sans getter
    Euh la je comprend pas où est le problème.

    a+

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par djisse Voir le message
    Bah en fait je debute en java, et j'ai appris en utilisant Hashtable et Enum.... donc je sais pas, je connais pas Iterator, et j'arrive pas à le comprendre!
    Ben justement comme tu débutes autant prendre les bonnes résolutions dès le début !
    Hashtable, Vector et Enumeration date de Java 1.0 et ont beaucoup de défaut (synchronisation inutile et couteuse, méthode doublons, pas d'abstraction, etC.)

    Elles ont été "remplacé" depuis Java 1.2 par le couple interface/type concret qui permet bien plus de possibilité : Map/HashMap, List/ArrayList et Iterator.

    N'importe quel cours sur les collections t'apportera plus d'info là dessus...

    Quand à Iterator il fonctionne de la même manière que l'Enumeration donc je ne vois pas la difficulté


    Citation Envoyé par djisse Voir le message
    Pourquoi?
    Les Generics te permettent de typer ton code, et donc de permettre au compilateur de vérifier la cohérence de l'ensemble et d'éviter des erreurs à l'exécution. De plus cela permet d'éviter des casts


    Citation Envoyé par djisse Voir le message
    Bah en fait la liste est dans un fichier, donc j'utilise une classe que j'ai crée pour gérer les fichier...donc je doit caster ce qui sort de la deserialization ect...
    Oui mais à quoi cela te sert de créer 2 objets à la suite, sans utiliser le premier. Dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Compte objet=new Compte("how"); // how how how ???
            objet=(Compte) e.nextElement();
    Le compte "how" est crée et supprimé immédiatement derrière. Cela ne sert à rien !!!


    Citation Envoyé par djisse Voir le message
    Euh la je comprend pas où est le problème.
    En Java, les conventions de nommages impliquent que les noms de méthode ne prennent pas d'underscore, mais uniquement des majuscule pour séparer les mots. De plus tu mélanges français et anglais
    A la place de afficher_all() tu devrais avoir printAll() ou afficherTout()...

    Quand à l'accès direct aux attributs, cela casse complètement la notion d'encapsulation. Bref dommage d'utiliser du Java si tu ne fais pas de la POO...

    a++

  14. #14
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2009
    Messages : 138
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Pourquoi faire ???
    Une fois parcouru jusqu'à la fin l'Enumeration est complètement inutile

    Au contraire la déclarer dans le for permet de limiter sa porté et de facilité le travail du GC...
    Ok, je viens de regarder la javadoc de l'enumeration...
    Au temps pour moi, je croyais que c'était similaire à un ArrayList, qu'on pouvait autre chose que la parcourir...
    Et par conséquent oui, je comprend donc bien l'utilité de la déclaration dans le for. Merci

  15. #15
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Ben justement comme tu débutes autant prendre les bonnes résolutions dès le début !
    Hashtable, Vector et Enumeration date de Java 1.0 et ont beaucoup de défaut (synchronisation inutile et couteuse, méthode doublons, pas d'abstraction, etC.)

    Elles ont été "remplacé" depuis Java 1.2 par le couple interface/type concret qui permet bien plus de possibilité : Map/HashMap, List/ArrayList et Iterator.

    N'importe quel cours sur les collections t'apportera plus d'info là dessus...

    Quand à Iterator il fonctionne de la même manière que l'Enumeration donc je ne vois pas la difficulté



    Les Generics te permettent de typer ton code, et donc de permettre au compilateur de vérifier la cohérence de l'ensemble et d'éviter des erreurs à l'exécution. De plus cela permet d'éviter des casts


    Merci! J'en prends note.

    Oui mais à quoi cela te sert de créer 2 objets à la suite, sans utiliser le premier. Dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Compte objet=new Compte("how"); // how how how ???
            objet=(Compte) e.nextElement();
    Le compte "how" est crée et supprimé immédiatement derrière. Cela ne sert à rien !!!



    a++
    Bah en fait, l'objet de type Compte, me sert a recuperer dans une variable l'entrée du Hashtable, pour pouvoir ensuite travailler dessus.Il n'est pas supprimé ensuite!

    En Java, les conventions de nommages impliquent que les noms de méthode ne prennent pas d'underscore, mais uniquement des majuscule pour séparer les mots. De plus tu mélanges français et anglais
    A la place de afficher_all() tu devrais avoir printAll() ou afficherTout()...

    Ok, j'en prend note aussi.

    Quand à l'accès direct aux attributs, cela casse complètement la notion d'encapsulation. Bref dommage d'utiliser du Java si tu ne fais pas de la POO...
    Je devrais utiliser les accesseur.... c'est ca que t'essaie de me faire comprendre? Donc si j'utilise pas les accesseur c'est plus vraiment de la POO?Je penser qu'on pouvait faire les 2.non?

  16. #16
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par djisse Voir le message
    Bah en fait, l'objet de type Compte, me sert a recuperer dans une variable l'entrée du Hashtable, pour pouvoir ensuite travailler dessus.Il n'est pas supprimé ensuite!
    Sauf qu'ici tu as 2 objets Compte, et que le premier n'est pas utilisé avant que sa référence ne soit remplacé par une autre valeur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Compte objet=new Compte("how"); // new = création d'un objet
            objet=(Compte) e.nextElement();   // affectation d'un nouvel objet, le premier n'est plus visible donc libérable par le GC
    En clair : pourquoi ne pas tout simplement faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Compte objet = (Compte) e.nextElement();
    C'est nettement plus lisible en plus !

    Citation Envoyé par djisse Voir le message
    Je devrais utiliser les accesseur.... c'est ca que t'essaie de me faire comprendre? Donc si j'utilise pas les accesseur c'est plus vraiment de la POO?Je penser qu'on pouvait faire les 2.non?
    Ben les accesseurs/mutateurs te permettent de controller l'accès aux attributs, et donc de t'assurer de leurs cohérence.

    Dans ton cas les portes sont grandes ouvertes


    a++

  17. #17
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Sauf qu'ici tu as 2 objets Compte, et que le premier n'est pas utilisé avant que sa référence ne soit remplacé par une autre valeur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Compte objet=new Compte("how"); // new = création d'un objet
            objet=(Compte) e.nextElement();   // affectation d'un nouvel objet, le premier n'est plus visible donc libérable par le GC
    En clair : pourquoi ne pas tout simplement faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Compte objet = (Compte) e.nextElement();
    C'est nettement plus lisible en plus !



    a++
    Oh,merci!Je savais pas que c'etait possible!

    Ben les accesseurs/mutateurs te permettent de controller l'accès aux attributs, et donc de t'assurer de leurs cohérence.

    Dans ton cas les portes sont grandes ouvertes
    Ok!
    Merci encore!

  18. #18
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 48
    Points
    48
    Par défaut
    Sujet résolu je ferme!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 13h06
  2. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 10h55
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 10/02/2003, 00h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 10h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 16h21

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