1

私が書いたJavaジェネリッククラスをテストしようとしています。これは私のテストです

public class BSTTest
{
    public void testInsert()
    {
        int height;
        BST<int> myTree = new BST<int>();
        myTree.insert(1);
    }

} 

しかし、コンパイルすると、予期しないタイプのエラーが発生し、int が見つかった場合は表示されますが、BST myTree = new BST(); の行に参照が必要です。どういう意味ですか?

以下は、参照用のバイナリ検索ツリーとノードクラスです

public class BST<E extends Comparable<E>>
{
    public Node<E> root;


    public BST()
    {
        root = null;
    }
    //insert delete find height
    public void find(E s, Node<E> n)
    {
        //empty tree, root is null
        if(n == null)
        {
            System.out.println("Item not present.");
        }
        //n is the node where s is, return n
        else if(n.getData().equals(s))
        {
            System.out.println("Item present");
        }
        //s is greater than n, look for s on the right subtree
        else if(s.compareTo(n.getData()) > 0)
        {
            find(s, n.getRight());
        }
        //s is less than n, look for s on the left subtree
        else
        {
            find(s, n.getLeft());
        }
    }

    public int height() 
    {
        int count;
        return count = height(root); 
    }

    private int height(Node<E> n)
    {
        int ct = 0;
        if(n == null)
        {

        }

        else
        {

            int left = height(n.getLeft());

            int right = height(n.getRight());

            ct = Math.max(left, right) + 1;
        }
        return ct;
    } 

    public void insert(E s) 
    {
        root = insert(s, root);
    } 

    private Node<E> insert(E s, Node<E> T)
    {
        //easiest case, empty tree, create new tree
        if(T == null)
        {
            T = new Node<E>(s,null,null);
        }
        //easiest case, found s
        else if(s.compareTo(T.getData()) == 0)
        {
            System.out.println("Item already present.");
        }
        //s is greater than T, insert on right subtree
        else if(s.compareTo(T.getData()) > 0)
        {
            T.setRight(insert(s, T.getRight()));
        }
        //s is less than T, insert on left subtree
        else
        {
            T.setLeft(insert(s,T.getLeft()));
        }
        return T;
    }

    public void delete(E d)
    {
    }

}

そして私のノードクラス

public class Node<E> 
    {
       private E data;
    private Node<E> left;
    private Node<E> right;
    private Node<E> parent;

       public  Node(E d, Node<E> r, Node<E> l) 
    {
      data = d;

        left = l;
        right = r; 
       }
       public void setData(E d) 
    {
      data = d;
       }
    public E getData()
    {
        return data;
    }
       public Node<E> getRight() 
    {
      return right;
       }
    public void  setRight(Node<E> nd)
    {
        right = nd;
    }
       public Node<E> getLeft()
    {
        return left;
    }
    public void  setLeft(Node<E> nd)
    {
        left = nd;
    }
    public Node<E> getParent()
    {
        return parent;
    }
    public void  setParent(Node<E> nd)
    {
        parent = nd;
    }
}
4

4 に答える 4

4

Integerの代わりに試すことができますintか?

于 2013-02-26T07:17:39.403 に答える
2

ジェネリック型はクラス (オブジェクト型) のみを取り、基本データ型は取り
ません。

BST<Integer> myTree = new BST<Integer>();
于 2013-02-26T07:18:47.600 に答える
0

intJavaのジェネリッククラスのパラメータとしてのようなプリミティブ型を使用することはできません。のようなクラスタイプである必要がありますInteger

于 2013-02-26T07:19:47.313 に答える
0

Java ジェネリックはオブジェクト型専用です。はプリミティブ型なのでint使用できません。代わりに使用BST<Integer>

于 2013-02-26T07:19:02.233 に答える