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; } }
Partager