Téléchargement
illégal
Posez votre question Signaler

Iterator [Résolu]

k-23 212Messages postés 4 mars 2008Date d'inscription 11 avril 2012Dernière intervention - Dernière réponse le 12 oct. 2011 à 07:05
Bonjour,
j'ai un problème lorsque j'utilise un iterator. la methode hasNext(); marche tres bien mais quand j'utilise next(); ca marche pas du tout. en fait ca compile mais lorsque je le test il plante dans le next();
private ArrayList <T> liste1;
private Iterator <T> ite;
public ListeImpl(){
liste1 = new ArrayList<T>();
ite = liste1.iterator();
}
public T prochainElement() {
if(ite.hasNext()){
System.out.println(ite.next());
return ite.next();//// CEST ICI QUE CA PLANTE CA COMPILE MAIS CA MARCHE PLUS ICI quand je test
}
return null;
}
merci pour laide
Lire la suite 

Iterator »

9 réponses
Réponse
+3
moins plus
Bonsoir,
Ce n'est pas étonnant, il faut faire de la manière suivante :
private ArrayList<T> liste1;
private Iterator<T> ite;

public ListeImpl(){
 liste1 = new ArrayList<T>();
 ite = liste1.iterator();
}

public T prochainElement() {
 T elmt = null;
 if(ite.hasNext()) {
  elmt = ite.next()
  System.out.println(elmt);
 }
 return elmt;
} 


Le fait est que quand tu fais appel à la méthode next(), celà déplace l'itérateur sur l'élément suivant. Donc quand tu fais ite.hasNext() (ta liste a encore au moins un élément), System.out.println(ite.next()) puis return ite.next(); tu peux avoir un problème (car tu fais deux next, donc si ta liste ne contient plus qu'un seul élément ça va planter).

Cordialement,
k-23- 20 févr. 2009 à 19:51
mais je pas modifier ma collection je veux juste qu'il return next();

est ce que cela modifie ma collection.

merci
Marco la baraque- 20 févr. 2009 à 20:07
Non, mais dans ton exemple, tu crées une liste vide, puis un itérateur sur cette liste. A partir de ce moment, il ne faut plus modifier ta liste tant que tu utilises ton itérateur (alors que toi, tu rajoutes des éléments, puis tu utilises ton itérateur pour récupérer les éléments).

Cordialement,
k-23- 20 févr. 2009 à 20:19
MERCI BEAUCOUP ÇA MARCHE PARFAITEMENT
Ajouter un commentaire
Réponse
+1
moins plus
voici la solution que j ai pu trouver grâce a vos éclaircissement, si vous voyez une façon plus optimiser pour faire bienvenue a toute autres suggestions
Code Java :

public class ListeAdtArraylistImpl<T> implements ListeAdt<T> {

private ArrayList<T> listeAdt;
private Iterator<T> iterateur;

public ListeAdtArraylistImpl() {
listeAdt = new ArrayList<T>();
iterateur = listeAdt.iterator();
}

public T[] ajouter(ListeAdt<T> liste) {
ArrayList<T> listeElementNonAjoute = new ArrayList<T>();
ArrayList<T> listeElementAjoute = new ArrayList<T>();

for (T element : listeAdt) {
if (liste.estElements(element)) {
listeElementNonAjoute.add(element);
} else {
listeElementAjoute.add(element);
}
}
for (T t : listeElementAjoute) {
liste.ajouter(t);
}
return (T[]) listeElementNonAjoute.toArray();

}

Code Java :
public T prochainElement() {
return listeAdt.iterator().next();
}

je l'ai tester est ça marche, pour si quelqu'un trouveras un jour le même problème au moins ça va donner une piste.
Ajouter un commentaire
Ce document intitulé « Iterator » 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 ?