0

ジェネリックは初めてで、ジェネリックを使用してバイナリ検索ツリーを実装する必要があります。私はそれをしましたが、今私が書いたコードをどのようにテストするのだろうかと思っていますか? 別のクラスを作成して、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;
}
}

私はあなたが言ったことに従おうとしています、これは私のテストクラスです public class BSTTest { public void testInsert() { int height; BST myTree = 新しい BST(); myTree.insert(1); }

} 

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

4

1 に答える 1

1

はい、BSTTestというクラスを作成し、BSTの各パブリックメソッドをテストするメソッドを作成します。

JUnitを使用する場合は、注釈と標準の命名規則を使用できます

public class BSTTest {
    @Test
    public void testInsert() {
        BST<String> bst = new BST<String>();
        String s = "hello";
        bst.insert(s);
        AssertTrue("I should get back what I put in!", bst.find(s));
    }

    @Test
    public void testDelete() {
        // etc...
    }

}

次に、この「ユニットテスト」をJava IDE(IntelliJ IDEAなど)で実行できます。セットアップしている場合は、mavenを使用して実行できますmvn test

また、あなたのfind()メソッドはブール値を返すことができると思いますか?

幸運を!

于 2013-02-21T22:23:21.837 に答える