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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    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 Expert
    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
    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 confirmé
    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
    Par défaut
    Bonjour,
    Il faut redéfinir la méthode toString() de la classe Cartes.

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

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

    Merci, merci, merci...

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    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 confirmé
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Merci.

  8. #8
    Membre Expert
    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
    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.

  9. #9
    Membre chevronné
    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
    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 ""
    }

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    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 ?

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