Liste chainée
sahlai
Messages postés
2
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonsoir,
J'ai un problème , j'arrive pas à trouver le bon chemin pour créer une méthode equals qui compare deux piles de liste en chaînée, voici ma classe :
J'attends vos réponses et merci .
J'ai un problème , j'arrive pas à trouver le bon chemin pour créer une méthode equals qui compare deux piles de liste en chaînée, voici ma classe :
import java.util.Arrays;
import java.util.Stack;
import tp3.question1.PilePleineException;
import tp3.question1.PileVideException;
public class Pile4 implements PileI, Cloneable {
/** la liste des Maillons/Elements */
private Maillon stk;
/** la capacité de la pile */
private int capacite;
/** le nombre */
private int nombre;
/**
* Classe interne "statique" contenant chaque élément de la chaine c'est une
* proposition, vous pouvez l'ignorer !
*/
private static class Maillon implements Cloneable {
private Object element;
private Maillon suivant;
public Maillon(Object element, Maillon suivant) {
this.element = element;
this.suivant = suivant;
}
public Maillon suivant() {
return this.suivant;
}
public Object element() {
return this.element;
}
public Object clone() throws CloneNotSupportedException {
Maillon m = (Maillon) super.clone();
m.element = element;
return m;
}
public void setSuivant(Maillon suivant){
this.suivant = suivant;
}
}
/**
* Création d'une pile.
*
* @param taille
* la taille de la pile, la taille doit être > 0
*/
public Pile4(int taille) {
if (taille <= 0)
taille = CAPACITE_PAR_DEFAUT;
this.stk = null;
this.capacite = taille;
}
public Pile4() {
this(PileI.CAPACITE_PAR_DEFAUT);
}
public void empiler(Object o) throws PilePleineException {
if (estPleine())
throw new PilePleineException();
Maillon ancienStk = stk;
stk = new Maillon(o, ancienStk);
nombre++;
// à compléter
}
public Object depiler() throws PileVideException {
if (estVide()){
throw new PileVideException();
}else{
Maillon m = this.stk;
this.stk = this.stk.suivant();
nombre--;
return m.element;
}
}
public Object sommet() throws PileVideException {
if (estVide())
throw new PileVideException();
return this.stk.element; // à compléter
}
/**
* Effectue un test de l'état de la pile.
*
* @return vrai si la pile est vide, faux autrement
*/
public boolean estVide() {
return stk == null;
}
/**
* Effectue un test de l'état de la pile.
*
* @return vrai si la pile est pleine, faux autrement
*/
public boolean estPleine() {
return this.capacite == this.taille(); // à compléter
}
/**
* Retourne une représentation en String d'une pile, contenant la
* représentation en String de chaque élément.
*
* @return une représentation en String d'une pile
*/
public String toString() {
String s = "[";
Maillon m =stk;
while(m != null){
s = s + m.element();
m = m.suivant();
if(m != null) s = s + " , ";
}
return s + "]";
}
public boolean equals(Object o) {
if (o instanceof Pile4) {
// à compléter
return false;
}
}
public int capacite() {
return this.capacite;
}
public int hashCode() {
return toString().hashCode();
}
public int taille() {
return nombre;
}
public Object[] toArray() {
return null;
}
}
J'attends vos réponses et merci .
A voir également:
- Liste chainée java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Liste déroulante excel - Guide
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
public boolean equals(Object o) { if (o instanceof Pile4) { // à compléter return true; } if(this != o){ return false; } PileI p = (PileI) o; return this.taille() == p.taille() && Arrays.equals(this.toArray(), p.toArray()); }public Object[] toArray() { return null; //??? }public Object[] toArray() { return null; //??? }Magnifique, en effet !
Bon sinon, sur ta méthode equals il y a (déjà) des choses qui ne vont pas :
if (o instanceof Pile4) { // à compléter return true; }D'accord c'est à compléter, mais le test est à l'envers de ce qu'il faudrait :
Pareil pour le test sur les références, il est à l'envers :
De plus ce test devrait être fait avant l'autre, de même il y a un autre test qui peut être fait d'abord c'est le cas de null :
Quant à la suite, pas besoin de convertir ta liste en tableau, ça n'a pas de sens, il suffit juste de comparer la valeur de et celle de .
Remarque : le code suivant est généré automatiquement (par Eclipse), il présuppose que la méthode Maillon a également une méthode equals de redéfinie (ce qui n'est pas le cas).
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof Pile4)) return false; Pile4 other = (Pile4) obj; if (capacite != other.capacite) return false; if (nombre != other.nombre) return false; if (stk == null) { if (other.stk != null) return false; } else if (!stk.equals(other.stk)) { return false; } return true; }