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 :

Affichage des éléments d'une ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Affichage des éléments d'une ArrayList
    Bonjour,

    J'ai bien regardé a peu près tout ce qui se dit sur le sujet sur internet, mmais là je déséspère (et en plus je débute..).

    Voilà une ArrayList créé et j'y rentre tout un tas d'objets. Ensuite je la mélange avec la méthode Collection.shuffle(). Jusque là je crois que tout va bien.

    Ensuite je fais une conversion de l'ArrayList vers un Tableau d'Objet suivant la méthode Object[] toArray, toute fraichement apprise.

    Et finalement j'affiche les éléments du tableau suivant leur indice, et c'est la que foire.

    Voici le code , j'ai simplifié en ne mettant qu'un seul objet dans laArrayList:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Cartes JC0 = new Cartes ("2" ,'h' ,2 ,'h');
    ArrayList  jC = new ArrayList ();
    jC.add(JC0);
    Collections.shuffle(jC);
    Cartes [] JCMelange = (Cartes []) jC.toArray(new Cartes[0]);
     
    for(int j = 0; j< JCMelange.length ; j++){
    	System.out.println("La carte "+ (j+1) + " est " + JCMelange[j]);
    }
    Ca affiche ca :

    La carte 1 est Cartes@a90653

    J'ai essayé précédement simplement d'afficher avec Object get.(i) les élément de la ArrayList sans convertir avec Object[] toArray, mais ca m'affichait la meme chose.

    Biensûr je voudrais que ca m'affiche les valeurs des champs usuels de l'objet, comme ca devrait le faire non (?).

    Si vous pouviez m'aider parce que je comprends pas et ca fais déjà pas mal de temps que je suis dessus T_T.

    Merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Il faut simplement redéfinir la méthode toString() de ta classe Cartes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Cartes {
      @Override
      public String toString() {
        StringBuilder builder = new StringBuilder();
        // builder.append(...);
        // builder.append(...);
        // ...
        return builder.toString();
      }
    }

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour,
    Il faut redéfinir la méthode toString() de la classe Cartes.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Oh merci les gars pour la rapidité, j'y aurais jamais pensé en plus.

    Merci, merci, merci...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Ok, mais que dois-je mettre dans Builder.append() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Override
    public String toString() {
    	 StringBuilder builder = new StringBuilder();
    	  // builder.append(...);
    	  // builder.append(...);
    	  // ...
    	  return builder.toString();
    }
    Si vous connaissez une doc sur la definition de la méthode toString() ca m'évitera de vous embeter.

  6. #6
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bah ça dépend de ce que toi tu veux afficher, ou plutôt qu'est ce qui te permet d'identifier textuellement ta classe.

    Par exemple, dans une classe Personne avec deux champ nom et prénom, toString pourra retourner prénom+" "+nom.

    Remarques que StringBuffer est conseillé plutôt que StringBuilder et que c'est surtout dans un souci d'optimisation qu'on utilise ces classes.
    Tu pourras t'en sortir plus simplement avec un simple return prénom+" "+nom;

    Bonne chance.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Super Djo.mos ca marche.

    Merci.

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Points : 379
    Points
    379
    Par défaut
    Par exemple une si dans une classe qui contient un entier x tu veux connaître la valeur de cet entier sous forme d'une chaine de caractères tu dois procéder 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
     
    class UneClasse {
     
        int x;
     
        //initialisation tu champs par le constructeur
        UneClasse(int x) {
            this.x = x;
        }
     
        @Override
        public String toString() {
            StringBuilder s = new StringBuilder();
            s.append(x); //ajout de la valeur de la variable x à la chaine de caractères
            return s.toString();
        }
    }
    Voilà, tu peux aussi transformer plus simplement ta variable en une chaine de carctères en utilisant l'opérateur +

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Override
    public String toString() {
        return x + ""; //concatène la valeur de la variable avec la chaine de caractère vide ""
    }

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci a toi soft.

    Si j'ai bien compris l'appelle de la fonction se fait implicitement, lorsque l'objet est cité à comparaitre (:o)
    Mais si je veux préciser le champ de l'objet à afficher (imaginons que l'objet ai trois variable x, y et k. Je voudrais a tout moment pouvoir afficher telle ou telle variable (ou même plusieurs en même temps)).

    Comment faire cela ?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Je viens de trouver. Je donne la réponse au cas où ca interesserait un autre newbie :

    Il faut créer une méthode spécifique et l'appelle de cette méthode ce fait comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Déclaration de méthode
    public String AfficheNom() {
    		StringBuilder builder = new StringBuilder();
    		builder.append(vN);    
     
    		return builder.toString();	    
    	}
     
     
    //Utilisation
    Terminal.ecrireStringln(tJ[i][0].AfficheNom()+" a la carte "+ tJ [i][1]);
    Désolé, quand on débute... on est naze.

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par djo.mos Voir le message
    Remarques que StringBuffer est conseillé plutôt que StringBuilder et que c'est surtout dans un souci d'optimisation qu'on utilise ces classes.
    Merci de ne pas intervertir StringBuffer et StringBuilder... J'ai pris la classe adéquate pour ses besoins, c'est à dire StringBuilder, car il n'y a pas de contexte multithread.

    En résumé : StringBuilder = rapide, sans multithread ; StringBuffer = lente, avec multithread. Dans 99% des cas, il est préférable de prendre StringBuilder, même si c'est StringBuffer qui l'est.

  12. #12
    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,


    Mmm... Quelques remarques :

    Citation Envoyé par soft0613 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        @Override
        public String toString() {
            StringBuilder s = new StringBuilder();
            s.append(x); //ajout de la valeur de la variable x à la chaine de caractères
            return s.toString();
        }
    }
    Pourquoi s'embêter avec un StringBuilder ici alors qu'on a qu'un seul élément à convertir en String !? C'est pas très lisible et inutile...

    Tant qu'on n'a pas de concaténation complexe on peut se passer de StringBuilder...

    Citation Envoyé par soft0613 Voir le message
    [code]Voilà, tu peux aussi transformer plus simplement ta variable en une chaine de carctères en utilisant l'opérateur +

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Override
    public String toString() {
        return x + ""; //concatène la valeur de la variable avec la chaine de caractère vide ""
    }
    Pourquoi faire une concaténation inutile ! Autant transformer directement en String, par exemple si x est un int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    public String toString() {
        return Integer.toString(x);
    }
    Citation Envoyé par dingoth Voir le message
    En résumé : StringBuilder = rapide, sans multithread ; StringBuffer = lente, avec multithread. Dans 99% des cas, il est préférable de prendre StringBuilder, même si c'est StringBuffer qui l'est.
    Le terme "lente" est quand même à prendre avec des pincettes et la différences entre les deux est rarement perceptible sur d'aussi petit bout de code...



    Sinon Centauri, une remarque sur ton code : pourquoi transformer ta liste en tableau pour la parcourir !?! Autant utiliser directement l'itérateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Iterator iterator = JC.iterator();
    while (iterator.hasNext()) {
        Carte carte = (Carte) iterator.next();
        // ...
    }
    Ou la boucle étendu (et les Generic) en Java 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList<Carte>  jC = new ArrayList<Carte>();
    // ...
    for (Carte carte : jC) {
        // ...
    }
    a++

  13. #13
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Points : 379
    Points
    379
    Par défaut
    Pour le StringBuilder c'est parce qu'il demandait comment l'utiliser et pour la concaténation c'est parce qu'en tant que débutant c'est plus simple, quoi que tu concatène avec une chaine de caractère cela cré une nouvelle chaine de caractère donc pas besoin d'introduire d'autres classes et méthodes qui servent surtout à l'optimisation.

    Sinon tu as raison l'utilisation le l'itérateur ou plus simplement de la boucle étendue est bien meilleure au niveau des performances de la clareté du code et de l'apprentissage.

  14. #14
    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 soft0613 Voir le message
    et pour la concaténation c'est parce qu'en tant que débutant c'est plus simple
    Au contraire : autant donné les bonnes habitudes aux débutants

    En effet quoi de mieux pour transformer un int en String qu'une méthode spécialement prévu pour cela (et qui est de toute manière appeler lorsque qu'on fait une concaténation).

    a++

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    merci pour toutes ces précisions,

    AdiGuba :

    En fait je débutes vraiment ca fais 2 mois que j'en fais. J'ai appris l'existence d'ArrayList il y a deux jours parce que j'avais besoin d'utiliser la méthode shuffle.

    Et c'est vrai que ca a l'air beaucoup plus "complet" que les tableaux, y a plein de méthodes pratiques comme celles que tu as citées.J'ai converti en tableau parce que je suis plus a l'aise avec pour l'instant.

    Sinon j'ai une autre question, désolé je sais que c'est pas le bon endroit mais autant économiser de l'espace disque :

    Je viens de lire une page du web de Barry Greenstein (joueur de poker et apparement programmeur) dans laquelle il explique comment evaluer les mains.
    Il utilise une technique binaire, avec des bits quoi et justement j'y connais rien mais ca me semble très utile et puissant pour comparer dans des jeux.

    Alors voilà si quelqu'un sait ou je peux trouver de la doc la dessus (en fr si c'est pas trop demander, c'est plus facile pour débuter), je lui ferais un p'tit "hello world" pour le remercier. Je vous file l'adresse de la page :
    http://barrygreenstein.com/eval.txt

    Merci encore

Discussions similaires

  1. affichage des éléments d'une liste horizontalement
    Par progamer54 dans le forum JSF
    Réponses: 7
    Dernier message: 16/04/2007, 10h34
  2. Comparaison des éléments d'une ArrayList
    Par Emilie MARQUOIS-OGEZ dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 31/10/2006, 15h17
  3. Réponses: 4
    Dernier message: 09/08/2006, 11h05
  4. Réponses: 7
    Dernier message: 16/05/2006, 15h40
  5. Eviter l'affichage des éléments d'une liste déroulante
    Par auriolbeach dans le forum Access
    Réponses: 1
    Dernier message: 28/02/2006, 07h50

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