【发布时间】:2015-10-27 01:57:19
【问题描述】:
import tree.BinaryTree;
public class TreeMap<K extends Comparable<K>, V> implements MyMap<K, V> {
private BinaryTree<Element> map;
java.util.Set<K> keys;
private int size;
@Override
public java.util.Set<K> keySet() {
inorder(map);
return keys;
}
public String toString() {
return map.toString();
}
private class Element {
K key;
V value;
public Element(K key, V value) {
this.key = key;
this.value = value;
}
public int compareTo(Element that) {
return this.key.compareTo(that.key);
}
public String toString() {
return (key.toString());
}
}
private void inorder(BinaryTree<Element> tree) {
if (tree != null) {
inorder(tree.getLeft());
keys.add(tree.getRoot().key);
inorder(tree.getRight());
}
}
}
大家好! :) 我在为我的密钥集添加密钥时遇到了很多麻烦。 如何将密钥附加到集合中? :/ 最糟糕的部分是它没有向我显示它所说的异常
at TreeMap.inorder(TreeMap.java:188)
at TreeMap.keySet(MyTreeMap.java:60)
at TreeMap.main(MyTreeMap.java:244)
Java Result: 1
这只是我的代码的一个 sn-p,除了我的 keySet/inorder 方法之外一切正常。我的代码第 188 行是
keys.add(tree.getRoot().key);
我已经搜索、重试并再次搜索,但无法到达任何地方。我会很感激你们能给我的任何帮助。 提前致谢! :)
这里是二叉树类
public class BinaryTree<E>
{
private E root;
private BinaryTree<E> left;
private BinaryTree<E> right;
public BinaryTree(E paramE, BinaryTree<E> paramBinaryTree1, BinaryTree<E> paramBinaryTree2)
{
this.root = paramE;
this.left = paramBinaryTree1;
this.right = paramBinaryTree2;
}
public BinaryTree(E paramE)
{
this(paramE, null, null);
}
public E getRoot()
{
return (E)this.root;
}
public BinaryTree<E> getLeft()
{
return this.left;
}
public BinaryTree<E> getRight()
{
return this.right;
}
public E setRoot(E paramE)
{
Object localObject = this.root;
this.root = paramE;
return (E)localObject;
}
public BinaryTree<E> setLeft(BinaryTree<E> paramBinaryTree)
{
BinaryTree localBinaryTree = this.left;
this.left = paramBinaryTree;
return localBinaryTree;
}
public BinaryTree<E> setRight(BinaryTree<E> paramBinaryTree)
{
BinaryTree localBinaryTree = this.right;
this.right = paramBinaryTree;
return localBinaryTree;
}
public String toString()
{
StringBuilder localStringBuilder = new StringBuilder("" + this.root);
if (!isLeaf())
{
localStringBuilder.append("(");
if (this.left != null) {
localStringBuilder.append(this.left);
}
if (this.right != null) {
localStringBuilder.append("," + this.right);
}
localStringBuilder.append(")");
}
return localStringBuilder + "";
}
public boolean isLeaf()
{
return (this.left == null) && (this.right == null);
}
}
【问题讨论】:
-
您能否发布完整的异常堆栈跟踪,我们需要查看 BinaryTree 实现。
-
好的,我添加了 BinaryTree 类
-
在
Element中,实例变量key没有封装修饰符,但您正试图通过调用tree.getRoot().key来访问它,就好像它是公共的一样。在这个实现中我还有很多其他的东西我会改变,但我认为你得到的(神秘)异常是由于在该范围内不可见时直接访问key。当我说发布完整的堆栈跟踪时,我的意思是也包括异常类型。
标签: java set binary-search-tree inorder keyset