Afficher les objets d'une liste s'il sont de type classe

Résolu/Fermé
membre1990 - Modifié par membre1990 le 10/04/2014 à 16:32
 membre1990 - 13 avril 2014 à 00:01
Bonjour,

j'ai codé en java une liste chainé d'objets. j'ai affiché les objets de la liste si j'ai testé avec des entiers, mais je sais pas comment faire pour les afficher s'ils sont de types classes,exemple une classe "Personne", SVP quelq'un peut m'aider :/

public class Personne {
String nom;
String prenom;
int age;
.....}

class Noeud
{
Object info;
Noeud suivant;
...
}

public class ListeChainee {
Noeud premier;
Noeud dernier;
...}

:




A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 avril 2014 à 18:20
Bonjour,

Il est toujours intéressant lorsque l'on fait de la programmation objet de toujours généraliser au maximum.
Ici tu as un code pour des entiers tu veux l'adapter pour une classe Personne puis ce sera autre chose, et pourtant le code ne change pas vraiment selon le type des données.
Ce que tu peux faire c'est paramétrer tes classes ce qui donne :

class Noeud<E>
{
E info;
Noeud<E> suivant;
...
}

public class ListeChainee<E>
{
Noeud<E> premier;
Noeud<E> dernier;
...
}
Tu pourras ensuite utiliser des ListeChainee<Personne> où tout les "E" seront des Personne.
0
merci beaucoup pour votre aide, ma problème c'est comment accéder aux champs de la classe Personne et les afficher à partir de la liste.
j'ai inséré des instances de la classes personne dans ma liste, mais je sais pas comment afficher les trois attribut(nom , prenom, age). voici la fonction d'affichage que j'ai :


public void afficher(ListeChainee l)
{
Noeud n = premier;
while (n!=null)
{
System.out.print(n.info+ "->");
n = n.suivant;
}
System.out.println("null");
}

j'ai testé comme suit :


ListeChainee l=new ListeChainee<Personne>();
Personne p=new Personne("AAA","BBB",10);
l.ajouter_debut(p,l);
l.afficher(l);


le resultat etait "" Personne@1754ad2->null """ et c'est logique de retourner juste la référence de la classe :( .
SVP comment peux je resoudre ce problème ???
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
12 avril 2014 à 14:26
le resultat etait "" Personne@1754ad2
Ici le problème c'est que tu n'as pas redéfinit la méthode toString de la classe Personne, par défaut elle va t'afficher l'implémentation de la classe Object qui donne "Personne@1754ad2" ce qui correspond au nom de la classe et au hashCode de l'objet.

Redéfinis donc la méthode toString, par exemple comme ceci :

@Override
public String toString()
{
    return String.format("{nom=%s, prenom=%s, age=%d}", nom, prenom, age);
}

Ce qui te donnera "{nom=AAA, prenom=BBB, age=10}->null"

Sur le même principe je te conseille de remplacer la méthode afficher(ListeChainee l), par la méthode toString dans la classe ListeChainee, comme ça tu pourras faire directement un
System.out.println(l);
pour afficher n'importe quelle liste chaînée.

@Override
public String toString()
{
    StringBuilder sb = new StringBuilder();
    
    for (Noeud n = premier; n != null; n = n.suivant)
        sb.append(n.info).append(" -> ");
    
    return sb.append("null").toString();
}

Remarque : tu as écrit
ListeChainee l=new ListeChainee<Personne>();
mais dans la déclaration il faut également préciser le type <E,> sinon par défaut ce sera un Object etperds la référence sur E, il faudrait donc écrire
ListeChainee<Personne> l
.
0
merciiiii beaucoup KX, je vous souhaite une bonne continuation ^_^
0