3

我得到了一个具有以下声明的通用二叉搜索树类:

public class BST<K extends Comparable<K>, V>

我被要求编写一个反转 BST 的方法,使值成为键,键成为值。当我调用以下方法时(在给定的类中定义)

reverseDict.put(originalDict.get(key), key); 

我从 Netbeans 收到以下两条错误消息:

线程“主”java.lang.RuntimeException 中的异常:无法编译的源代码 - 错误的符号类型:BST.put

并且:

没有找到适合方法的put(V,K)方法BST.put(BST<K,V>.Node,K,V)不适用(实际参数列表和形式参数列表的长度不同)方法BST.put(K,V)不适用(实际参数V不能通过K方法调用转换转换为)其中VK是类型变量:

V extends Object在方法中声明<K,V>reverseBST(BST<K,V>)

K extends Comparable<K>在方法中声明<K,V>reverseBST(BST<K,V>)

从错误消息告诉我的内容来看,由于我的值没有扩展Comparable,我无法将它们用作键。如果我是对的,我怎样才能在不改变给定课程(可能是演员表)的情况下解决这个问题?

4

2 回答 2

2

我认为问题在于您需要 aV extends Comparable<V>才能将其用作键,但您只有 aV没有界限。我认为您需要编写一个静态方法,例如..

public static <A extends Comparable<A>, B extends Comaparable<B>> 
    BST<B,A> invert(BST<A,B> bst) {...}

..以确保附加条件。

于 2012-11-18T17:46:05.260 回答
0

您的类public class BST<K extends Comparable<K>, V>必须有put方法(通常insert在树中)以避免此错误。也是get方法。

添加这个方法

public void put(K key, V value) {
   // add key and associated value to this BST; 
}

并通过调用该方法

reverseDict.put(originalDict.get(key), key) ;

这是一个很好的二叉搜索树示例,您可以参考。

于 2012-11-18T17:52:17.940 回答