Question sur l'interface comparable en java
luna sarita
-
luna sarita -
luna sarita -
Bonjour,
j'ai un programme que j'arrive pas à comprendre le voici mais ce que je ne comprend pas c'est la ligne en gras avec le mot clé comprarable sachant que mon sous programme recherche une valeur dans un arbre an faisant un parcours préfixé je sais que dans la ligne que je ne comprend pas il compare la valeur de la racine de l'arbre a la valeur passé comme parametre dans le sous programme mais je connais pas comparable est ce que c'est une classe et comment ça fonctionne? merci
public boolean recherchePréfixé(Object val, Arbre b) {
boolean resultat=false;
if (b==null) resultat=false ; //condition d'arrêt
else {
if (((Comparable)val).compareTo(b.getValeur().toString())==0) { //on teste d'abord la racine
resultat=true;
b.trouve=true; //variable permettant de dire que le noeud est le bon
b.parcouru=false;
}
else { //on continue la recherche après
b.parcouru=true; //variable permettant de repérer que le noeud a été comparé
//si pas de fils gauche on regarde à droite
if (b.filsg==null) resultat=recherchePréfixé( val, b.filsd);
//si pas de fils droit on regarde à gauche
else if (b.filsd==null) resultat=recherchePréfixé( val,b.filsg);
//si on a les 2 on regarde d'abord à gauche puis à droite
else resultat=((recherchePréfixé( val, b.filsg)) || (recherchePréfixé( val, b.filsd)));
}
}
return resultat;
}
j'ai un programme que j'arrive pas à comprendre le voici mais ce que je ne comprend pas c'est la ligne en gras avec le mot clé comprarable sachant que mon sous programme recherche une valeur dans un arbre an faisant un parcours préfixé je sais que dans la ligne que je ne comprend pas il compare la valeur de la racine de l'arbre a la valeur passé comme parametre dans le sous programme mais je connais pas comparable est ce que c'est une classe et comment ça fonctionne? merci
public boolean recherchePréfixé(Object val, Arbre b) {
boolean resultat=false;
if (b==null) resultat=false ; //condition d'arrêt
else {
if (((Comparable)val).compareTo(b.getValeur().toString())==0) { //on teste d'abord la racine
resultat=true;
b.trouve=true; //variable permettant de dire que le noeud est le bon
b.parcouru=false;
}
else { //on continue la recherche après
b.parcouru=true; //variable permettant de repérer que le noeud a été comparé
//si pas de fils gauche on regarde à droite
if (b.filsg==null) resultat=recherchePréfixé( val, b.filsd);
//si pas de fils droit on regarde à gauche
else if (b.filsd==null) resultat=recherchePréfixé( val,b.filsg);
//si on a les 2 on regarde d'abord à gauche puis à droite
else resultat=((recherchePréfixé( val, b.filsg)) || (recherchePréfixé( val, b.filsd)));
}
}
return resultat;
}
A voir également:
- Question sur l'interface comparable en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
val est un Object, mais tu utilises la méthode compareTo qui n'existe pas dans Object, donc ton code ne marchera que si val est un objet bien particulier qui possède la méthode compareTo, c'est à dire qui implémente Comparable. Donc ce que tu fais ici, c'est que tu précises que val est un Comparable, ce qui fera ce que tu veux si c'est bien un Comparable, mais plantera en général.
En fait le mieux ce serait d'écrire recherchePréfixé(Comparable val, Arbre b), comme ça il n'y aurait plus de problème, mais quand on manipule les arbres on est en général beaucoup plus précis en faisant des trucs comme recherchePréfixé(T val, Arbre<T> b), avec T qui implémente Comparable<T>, mais je ne sais pas si tu as déjà vu ça.
En fait le mieux ce serait d'écrire recherchePréfixé(Comparable val, Arbre b), comme ça il n'y aurait plus de problème, mais quand on manipule les arbres on est en général beaucoup plus précis en faisant des trucs comme recherchePréfixé(T val, Arbre<T> b), avec T qui implémente Comparable<T>, mais je ne sais pas si tu as déjà vu ça.
La déclaration de ta classe Arbre devrait donc être un peu plus compliquée, mais ça permet d'être plus rigoureux dans l'utilisation des données.
Remarque : recherchePréfixé devrait s'appliquer sur l'arbre courant this, et pas sur l'arbre b passé en paramètre, ou alors la méthode doit être déclarée static (puisque this n'est pas utilisée).