Création
d'entreprise
Posez votre question Signaler

ArrayList(java) renvoi que le dernier element

Guntyr 8Messages postés 16 mars 2010Date d'inscription 19 août 2010Dernière intervention - Dernière réponse le 17 mars 2010 à 11:10
Bonjour,
Ça fait un moment que je parcours les conseils de ce forum, et malgré toutes les réponses que j'ai pu lire aucune n'a pu faire fonctionner mon programme.
Mon programme scanne une fichier .txt pour récupérer des informations à des endroits précis. Avec ces informations, je créé des objets pour les contenir. Jusque là, tout va bien. Afin de stocker et de pouvoir facilement accéder à ces objets, j'ai créé un ArrayList, vu que je ne peux savoir à l'avance combien d'objet seront créés par chaque fichier lu. Puis j'ai essayé d'afficher ces objets, de manière à vérifier que le tableau était bien créé.
C'est là que ça se gatte : Ayant lu la documentation Java sur les ArrayList, j'en suis arrivé à un petit algorithme tout simple, placé après la boucle de lecture du fichier :
for (int j=0;j<Tab.size();j++)
{
Tab.get(j).ecrireCDS();
}
ecrireCDS est ma fonction qui écrit les objets, et je peux vous assurer qu'elle marche très bien. Le problème est que le résultat de cet algorithme ne me donne que le dernier objet rentré dans mon ArrayList (Ici, Tab). Un compteur en static dans la fonction ecrireCDS me confirme cependant que le programme y passe bien un nombre de fois égal au nombre d'objets dans mon tableau. De plus, un affichage de type Tab.get(i).ecrireCDS au moment où l'objet est rajouté dans la liste me confirme que chaque objet est bien rentré.
J'ai essayé toute une batterie de test sur les différentes variables, dont je vous passerai tout les détails. J'ai essayé d'afficher la taille de ma liste, et elle a toujours été cohérente avec ce qu'elle était censée être. J'ai essayé de faire un bête println sur le Tab.get(j) dans la seconde boucle, et les identifiants des objets qui en sortaient a l'écran étaient tous differents.
J'ai de plus essayé de récupérer une syntaxe utilisant des iterator (bien que n'ayant pas exactement comprit comment ça fonctionnait...), mais toujours le même problème : seul le dernier objet de la liste était affiché.
Donc voilà. Je ne sais pas si le problème vient de ma fonction ecrireCDS, qui pourtant marchait très bien avant cela, ou si je fais une mauvaise utilisation des ArrayList, ou si c'est la combinaison des deux qui fait que ça ne fonctionne pas.
Lire la suite 

ArrayList(java) renvoi que le dernier element »

10 réponses
Réponse
+1
moins plus
un arraylist se parcours avec un itérator...
Iterator it=new ta_list.iterator();
while(it.hasNext()){
//pour retourner un élément, tu utilises it.next();
}
Guntyr- 16 mars 2010 à 18:18
Tu es sûr de ta syntaxe ? Eclipse me dit qu'il ne reconnait pas Tab (que j'ai mit à la place de ta_list dans ton exemple)
J'avais déjà vu une syntaxe similaire : Iterator it= Tab.iterator(); (sans le "new", donc) Ceci dit, même avec cette "nouvelle" syntaxe (je l'avais déjà essayée), le résultat reste le même : seul le dernier élément est affiché.
Ajouter un commentaire
Réponse
+0
moins plus
tu as bien mis
ArrayList<type d'objet dedant> Tab=new ArrayList<type d'objet dedans>();
puis
Iterator it= Tab.iterator();

il faut bien sur faire au tout départ import java.util.Iterator;
ps j'ai plus ou moins le même problème que toi, de mets dse objets Jpanel dans un arrayList, chaque JPanel étant sensé dessiner un rectangle, seul le premier et le dernier le font, bizarre n'est-ce pas.
Ajouter un commentaire
Réponse
+0
moins plus
Oui, c'est bien ce que j'ai fait. Enfin, plus exactement :
Iterator<CDS> it= Tab.iterator();
(CDS étant le type des mes objets. C'est aussi avec ça que j'ai appelé mon ArrayList)
Ajouter un commentaire
Réponse
+0
moins plus
pas besoin de mettre l'identificateur sur l'Iterator d'ailleur
Ajouter un commentaire
Réponse
+0
moins plus
Quand je ne le fais pas, Eclipse m'engueule et refuse de lancer le programme : il dit que la fonction "ecrireCDS" que j'utilise après sur mon iterator est pas sûre de fonctionner, vu qu'on est pas sûr que l'iterator soit un objet de type CDS... Donc si ça change rien, j'aime autant le mettre.
Ajouter un commentaire
Réponse
+0
moins plus
il faut le caster, c'est pour ça.
quand tu utilises next();
tu mets avant (CDS)it.next).ta_fonction();
Ajouter un commentaire
Réponse
+0
moins plus
J'avais déjà testé ça aussi... Et toujours sans succès. En même temps, si c'était un problème de cast, on ne pourrait même pas passer dans ecrireCDS
Comme la ligne (CDS)it.next).ta_fonction(); ne marchait pas, j'ai écrit ça :
CDS SS = (CDS)it.next();
SS.ecrireCDS();
Ajouter un commentaire
Réponse
+0
moins plus
Bon, j'ai essayé autre chose : J'ai "return"é mon tableau dans la classe qui prend en compte le clic sur le bouton. Là encore, quel que soit la syntaxe que j'utilise, c'est toujours le dernier élément qui est affiché. Je ne sais pas si ça apporte des indices, mais bon...
Personne n'a même une idée d'où le problème pourrait venir ? Si y'a des test a faire, je les fais volontiers.
Ajouter un commentaire
Réponse
+0
moins plus
RAAAAAAAAAAAAAAAAAAAAAH !!!
J'ai trouvé ! Je SAVAIS que le problème venait de ma fonction ecrireCDS ! J'avais tout simplement déclaré les variable locale en static (je sais plus trop pourquoi, d'ailleurs...) ! Donc forcement, elles bougeaient pas quand j'appelais la fonction !
Désolé, donc... J'aurais apprit plein de choses, mais je doute que ce topic soit intéressant à l'avenir. Merci pour ton aide, Artragis !
(Hop, une petite musique d'ambiance (9 secondes) pour clore le sujet : http://www.youtube.com/watch?v=tLtPrLtaRNo )
Ajouter un commentaire
Ce document intitulé « ArrayList(java) renvoi que le dernier element » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?