bonjour amis développeurs,

j'ai un soucis au niveau de ma méthode pour afficher une liste chainée. Déjà je suis sur une boucle infinie et je vois pas ce qui cloche.

en plus la console m'indique qu'il me faudrait un string toString que je n'arrive pas à faireje pense que mon cerveau n'en peux plus.

Je dois rendre mon travail demain en fin de journée. Je vous met mon code et n'hésitez pas sur vos remarques.

merci d'avance
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
 
 
 
public class listeChainee {
 
	public cellule tete;
 
	listeChainee() {
 
		tete = null;
	}
 
	listeChainee(cellule tt) {
 
		tete = tt;
	}
 
	public boolean empty() {//détermine si la liste est vide
 
		if (tete == null) {
			return true;
		} else {
			return false;
		}
	}
 
	public int head() {//accède à la tête de la liste
 
		if (empty()) {//si la liste est vide
			return -1;//on retourne une valeur incohérente
		} else {//sinon
			return tete.valeur;//on retourne la valeur de l'élément de tête
		}
	}
 
	public cellule tail() {//accède a la queue de la liste
 
		if (empty()) {//si la liste est vide
			return null;//on retourne null
		} else {//sinon
			return tete.suivant;//on retourne la queue de la liste
		}
	}
 
	public boolean cons(int e) {//construit une nouvelle cellule avec une valeur
 
		if (e >= 0) {//si e est bien un entier positif
			cellule tampon = new cellule(e);//on créer une nouvelle cellule de valeur e
			tampon.suivant = tete;//on affecte la liste courante en tant que queue
			tete = tampon;//on écrase la liste courante par la nouvelle liste
 
			return true;//on signale que l'ajout s'est bien passé
 
		} else {//sinon
			return false;//on signale que l'ajout à échouer
		}
 
	}
 
	public static int longueur(listeChainee listeX) {//calcule la longueur de la liste
 
		cellule celluleSuivante = listeX.tail();//on indique que la cellule suivante va à la queue
		if (!listeX.empty()) {//si la liste n'est pas vide
			listeChainee nextListe = new listeChainee(celluleSuivante);//on créer une nouvelle liste
			return listeChainee.longueur(nextListe) + 1;//on retourne la nouvelle liste
		}
		return 1;
	}
 
	public boolean chercher(listeChainee listeX, int element) {//cherche si un élément appartient à la liste
		boolean retour = false;
		if (listeX != null) {//on teste si la liste n'est pas null
			if (listeX.head() == element) {//on teste si l'élément de tête est pareil que l'élément recherché
				return true;//si c'est le même on sort de la boucle
			} else {//sinon
				cellule nextCellule = listeX.tail();//la cellule suivante est la liste de queue
				while (!retour && nextCellule != null) {//on fait tant que la condition est fausse et que la cellule suivante est différente de null
					if (nextCellule.valeur == element) {//si la valeur de la cellule suivante est celle que l'on cherche
						return true;//on sort de la boucle
					} else {//sinon
						nextCellule = nextCellule.NextCellule();//on passe à la cellule suivante
					}
				}
 
			}
		}
		return retour;//on retourne le résultat
	}
 
	public static int nieme(listeChainee listeX, int position) {//trouve et retourne un élément a une position précise
		if (position == 1) {//si la position rechercher est la 1ère
			return listeX.head();//on retourne la tête de liste
		} else {//sinon
			return listeChainee.nieme(listeX, position - 1);//on recherche la position dans la liste de queue
		}
 
	}
 
 
	public static void afficher(listeChainee listeX) {
 
 
 
		while (!listeX.empty() ) {//tant que la liste n'est pas vide 
 
			Terminal.ecrireStringln(" " + listeX);//on écrit la liste
			cellule nextCellule = listeX.tail();//la cellule suivante est la queue de la liste
		}
		return;
 
	}
 
	public static void snoc(listeChainee listeX, int cellule) {//ajoute un element passe en parametre en fin de liste
		cellule nextCellule = listeX.tail();//la cellule suivante est la liste de queue
		while (nextCellule != null) {//on fait tant que la cellule suivante n'est pas null
			nextCellule = nextCellule.NextCellule();//on passe de cellule en cellule
		}
		listeChainee nouvelle = new listeChainee();//on créer une nouvelle liste
		nouvelle.cons(cellule);//on ajoute une cellule à la fin de la nouvelle liste
		return;//on retourne la liste
	}
 
	public boolean filtrerPair(listeChainee listeX) {//permet d'avoir que des nombres pairs
		boolean vrai = false;
		listeChainee lc = new listeChainee();//on crée une nouvelle liste
		if (listeX.head() % 2 == 0) {//si la tête de liste est divisible par 2
			listeX = lc;//on l'ajoute à la nouvelle liste
			return true;
 
		} else {//sinon
			cellule nextCellule = listeX.tail();//la cellule suivante est la queue de la liste
			while (!vrai && nextCellule != null) {//on fait tant que la condition est différente de vrai et que la cellule suivante est différente de null
				if (nextCellule.valeur % 2 == 0) {//si la valeur contenue dans la cellule suivante est divisible par 2
					listeX = lc;//on l'ajoute à la nouvelle liste
					return true;
				} else {//sinon
					nextCellule = nextCellule.NextCellule();//on passe à la cellule suivante
				}
			}
 
		}
 
		listeChainee.afficher(lc);//on affiche la nouvelle liste
		return vrai;
 
	}
 
}