2017-10-17 18 views
0

Je rencontre actuellement des problèmes en essayant de modéliser un arbre de recherche binaire avec des types de données génériques. Je finirai par lire les valeurs de chaîne et les insérer dans l'arbre binaire, d'où la déclaration de chaîne dans la classe Nodez. La classe Nodez est une classe I définie pour déclarer les noeuds à transmettre à l'arbre de recherche. La valeur de chaîne sera un attribut de cette classe. Le BSTree est basé sur une classe définie comme suit:types incompatibles: Le noeud ne peut pas être converti en comparable (lors de son passage en paramètre)

public class BSTree<E extends Comparable<E>> implements BSTreeAPI<E>  

Mon problème réside dans le bloc de code principal. L'erreur se produit lorsque j'essaie d'insérer une instance de la classe Nodez. L'erreur exacte ici indique: "types incompatibles: Nodez ne peut pas être converti en comparable"

J'ai passé un bon moment à essayer de déboguer cela, mais je ne suis pas si génial avec les génériques?

Des suggestions s'il vous plaît? Merci!

package twotreesanalyzer; 
import java.io.IOException; 
import java.io.PrintStream; 
import java.util.function.Function; 

public class TwoTreesAnalyzer 
{ 

    public static class Nodez <E extends Comparable<E>> { 
     public String x; 
     public E node; 

     public String get(){ 
      return x; 
     } 
    } 

public static void main(String[] args) throws AVLTreeException, BSTreeException, IOException 
    {   

     Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x); 

     BSTree bstTest = new BSTree(); 

     Nodez e1 = new Nodez(); 
     e1.x = "fresh"; 


     bstTest.insert(e1); 

     System.out.println(bstTest.inTree(e1.get())); 

    } 
} 
+0

et comment la classe ' Nodez' ressemble? met-il en œuvre des solutions comparables? en passant, ce serait une bonne idée de donner de bons noms à vos cours/méthodes/objets même si c'est juste un projet de jouet! – alfasin

+0

Droite. Nodez est déclaré au dessus de la principale. Quand il implémente comparable, il renvoie une déclaration que nodez n'est pas abstrait et ne remplace pas la méthode abstraite compareTo (E) dans Comparable – boppa

Répondre

1

En ce moment votre BSTree tente de comparer vos objets nodez, si cela est la façon dont vous voulez fonctionner, vous devez mettre en œuvre comparible votre classe Nodez. Je l'ai réparé rapidement avec un arbre de collections à titre d'exemple.

public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{ 
     public String x; 
     public E node; 

     public String get(){ 
      return x; 
     } 

     @Override 
     public int compareTo(Nodez<E> node) { 
      return node.x.compareTo(x); 
     } 
    } 

public static void main(String[] args) throws IOException 
    {   

     Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x); 

     TreeSet<Nodez<String>> bstTest = new TreeSet<>(); 

     Nodez<String> e1 = new Nodez<>(); 
     e1.x = "fresh"; 


     bstTest.add(e1); 

     System.out.println(bstTest.contains(e1)); 

    } 

Cependant, je pense que vous allez pour le nœud d'être en mesure d'accepter tout type générique qui est comparable auquel cas il devrait être commandé un peu plus comme ceci:

public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{ 
     public E x; 
     public Nodez<E> node; 

     public E get(){ 
      return x; 
     } 

     @Override 
     public int compareTo(Nodez<E> node) { 
      return node.x.compareTo(x); 
     } 
    } 

public static void main(String[] args) throws IOException 
    {   

     Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x); 

     TreeSet<Nodez<String>> bstTest = new TreeSet<>(); 

     Nodez<String> e1 = new Nodez<>(); 
     e1.x = "fresh"; 


     bstTest.add(e1); 

     System.out.println(bstTest.contains(e1)); 
    } 
+0

Wish que je pourrais upvote cela 100 fois ... cela efface tout cela mais oui, je vais passer principalement des types de cordes mais je cherchais toujours à le modéliser de façon plus générale. Merci beaucoup; travaillé comme un charme – boppa

+0

Pas de problème, content de pouvoir aider. – luckydog32