Bonjour
Dand un tp on nous a demander d'implementer les deux interface Iterable et Iterator pour permettre de parcourir les maillon,mais je sais pas comment les implementer.
Avez vous une idee comment les implementer
Merci
Bonjour
Dand un tp on nous a demander d'implementer les deux interface Iterable et Iterator pour permettre de parcourir les maillon,mais je sais pas comment les implementer.
Avez vous une idee comment les implementer
Merci
En fait je veux redefinir les methodes de ces deux interfaces pour parcourir la liste chainee que j'ai creer.
Je sais qu'il existe une classe deja prete pour les listes chainees mais c'est le professeur qui nous a demander de faire cela.
Moi je veux un itérateur pour ma liste chainée faite maison et pas la classe LinkedList déjà définie dans le langage.
En tous cas je donne mon essai
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
18
19
20
21
22
23
24
25
26
27
28
29 @Override public Iterator<T> iterator() { liste=new ListeAdtImpl<T>(); Iterator<T> it=liste.iterator(); // TODO Auto-generated method stub return it; } @Override public boolean hasNext() { Noeud<T> courrant=tete; if(courrant.getSuivant()!=null){ return true; } // TODO Auto-generated method stub // Noeud<T> courrant=tete return false; } @Override public T next() { // TODO Auto-generated method stub Noeud<T> courrant=tete; if(hasNext()){ courrant=courrant.getSuivant(); } return courrant.getElement(); }
Salut,
le principe est d'implémenter Iterable<T> sur ta classe (apparement ListeAdtImpl<T>) donc de cette manière par exemple:
Comme tu n'as pas mis le code complet de ta classe, je suis obligé d'imaginer le nom des variables que tu as utilisées pour montrer l'exemple d'un iterateur
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
18
19
20
21
22
23
24 public class ListeAdtImpl<T> implements Iterable<T> { public Iterator<T> iterator() { return new ListeAdtImplIterator(); } private class ListeAdtImplIterator implements Iterator<T> { public boolean hasNext() { // le code adéquate pour indiquer s'il reste des éléments } public T next() { // le code adéquate pour retourner la prochaine valeur à lire (ou une exception NoSuchElementException s'il n'y en a pas } public void remove() { // le code adéquate pour supprimer la dernière valeur obtenue par next(), ou une exception IllegalStateException siaucune valeur n'a été lue, ou si la dernière valeur lue a déjà été supprimée par l'appel de cette méthode // ou eventuellement UnsupporterdOperationException si tu ne veux pas qu'un puisse supprimer } } }
donc imaginons que ta liste chainée est fondée sur :
- une classe interne Element<T> ayant pour variable de type T valeur pour la valeur et suivant pour l'élément suivant (de type Element<T>)
- une variable premier de type Element<T> pour le premier element de la liste
un truc dans le genre par exemple :
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
18
19
20
21 private class Element<T> { private T valeur; private Element<T> suivant; public Element() { } public Element(T valeur) { setValeur(valeur); } public void setValeur(T valeur) { this.valeur=valeur; } public T getValeur() { return valeur; } public void setSuivant(Element<T> suivant) { this.suivant=suivant; } public Element<T> getSuivant() { return suivant; } }
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 public class ListeAdtImpl<T> implements Iterable<T> { private Element<T> premier; public ListAdtImpl(){ } public void add(T valeur) { if ( premier==null ) premier=new Element<T>(valeur); else { Element<T> dernier=premier; while(dernier.getSuivant()!=null) { dernier=dernier.getSuivant(); } dernier.setSuivant(new Element<T>(valeur)); } } public Iterator<T> iterator() { return new ListeAdtImplIterator(); } private class ListeAdtImplIterator implements Iterator<T> { private Element<T> courant; public ListeAdtImplIterator() { courant=premier; } public boolean hasNext() { return courant!=null; } public T next() { if ( courant==null ) throw new NoSuchElementException(); T valeur = courant.getValeur(); courant = courant.getSuivant(); return valeur; } public void remove() { throw new UnsupportedOperationException(); } } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Merci c'est ca se que je cherche mais il faut que je redefinis aussi la methode Iterator de l'interfce Iterable cet methode a l'air plus difficile que next et hasNext.
Mais, je l'ai mise la méthode iterator() de l'interface Iterable (et elle est pas plus difficile que celles de Iterator) :
C'est juste une méthode qui retourne une instance de classe implémentant l'interface Iterator.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public Iterator<T> iterator() { return new ListeAdtImplIterator(); }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Partager