2017-10-17 9 views
0

現在、一般的なデータ型のバイナリ検索ツリーをモデル化しようとしています。私は最終的には文字列値を読み込み、それらをバイナリツリーに挿入することになり、Nodezクラスの文字列宣言になります。 Nodezクラスは、検索ツリーに渡すノードを宣言するために定義したクラスです。文字列の値は、このクラスの属性になります。 BSTreeは、次のように定義されたクラスに基づいています。互換性のない型:NodeをComparableに変換できません(パラメータとして渡す場合)

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

私の問題はコードのメインブロックにあります。このエラーは、Nodezクラスのインスタンスを挿入しようとしたときに発生します。 「互換性のないタイプ:NodezをComparableに変換できません」

これをデバッグしようとしましたが、ジェネリックではあまり良くありませんでしたか?

お願いします。ありがとう!これは、あなたがそれはあなたがあなたのNodezクラスのComparible実装する必要が機能するようにする方法であれば

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

とどのようにクラスを ' Nodez'のように見える?それは同等ですか?ちなみに、ちょうどおもちゃプロジェクトであっても、クラス/メソッド/オブジェクトに良い名前を付けることは良い考えです! – alfasin

+0

右。 Nodezはメインの上に宣言されています。 Comparableを実装すると、nodezは抽象メソッドではなく、抽象メソッドcompareTo(E)をオーバーライドしないことを返します。 – boppa

答えて

1

今、あなたのBSTreeは、あなたのnodezオブジェクトを比較しようとしています。私はコレクションツリーを例にしてそれをすぐに修正しました。

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)); 

    } 

私はあなたがそれをもう少しこのような発注する必要があり、その場合には、同等だ任意のジェネリック型受け入れることができるようにノードに対してつもりだったと思うしかし:

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これを100倍アップアップすることができます...これですべてがクリアされますが、主に文字列型ですが、私はまだそれをより一般的な方法でモデル化しようとしていました..ありがとうございました。魅力のように働いた – boppa

+0

問題なく、私は助けることができてうれしい。 – luckydog32

関連する問題