Problème qui persiste avec une itération [Résolu]

Signaler
Messages postés
2
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
12 octobre 2011
-
Messages postés
2
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
12 octobre 2011
-
Bonjour,

J'ai un problème avec le code suivant
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> listElementNonAjoute = new ArrayList<T>();
        while (liste.existeProchainElement() && liste != null) {
            T elementCourant = liste.prochainElement();
            if (liste.estElements(elementCourant)) {
                ajouter(elementCourant);
            } else {
                listElementNonAjoute.add(elementCourant);
            }
        }
        return (T[]) listElementNonAjoute.toArray();
    }
 
    public boolean estElements(T element) {
        for (T elementExiste : listeAdt) {
            if (elementExiste.equals(element)) {
                return true;
            }
        }
        return false;
    }
public T prochainElement() {
return listeAdt.iterator().hasNext();
}

c'est mon main
ListeAdtArraylistImpl<String> listAAJouter = new ListeAdtArraylistImpl<String>();
listAAJouter.ajouter("L");
listAAJouter.ajouter("i");
listAAJouter.ajouter("s");
listAAJouter.ajouter("t");

le problème c est que mon iterateur se bloque sur le premier élément "L" ça fait deux jour que j'essaye de trouver une autre piste mais je n'arrive pas
[b]Note je n'ai pas le droit d'utiliser autres structures que ListAdtArrayList, aussi je dois faire usage aux méthodes que moi même j'ai développer c-à-d estElement(T element); prochainElement(); ajouter(T element); pour développer la méthode ajouter(listeAdt<T> liste);
si vous avez une autre piste ça va beaucoup m'aider
Merci d'avance/b

2 réponses

Messages postés
2
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
12 octobre 2011

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
 
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();
 
}

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.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
334
Bonjour,

Ton code est truffé d'erreurs, manifestement, tu n'utilises pas d'ide qui ne te laisserait pas passer ce genre de choses.

Rien que pour la fonction prochainElement, tu commet de nombreuses erreurs, la fonction hasNext retourne un booleen et pas un objet de type T. En plus, tu créé un nouvel itérateur systématiquement en utilisant .iterator(). Normal que ton code bloque au premier element, il faut que tu utilises ta variable iterateur.