我创建了BinarySearch Tree,我在插入键和值时遇到问题。 它说NullPointerException。
package BST;
public class Tree
{
public Node root = null;
public void insert(int key, Object obj)
{
Entry entry = new Entry(key,obj);
if(this.root==null)
{
this.root = new Node(entry, null);
}
else
{
insert(entry,this.root); //error
}
}
public void insert(Entry entry, Node temp)
{
if(((Entry) temp.getObj()).getKey() > entry.getKey()) //error
{
if(temp.isLeft())
insert(entry, temp.childLeft());
else
temp.addLeft(entry);
}
else
{
if(temp.isRight())
insert(entry, temp.childRight());
else
temp.addRight(entry);
}
}//insert
public void inorderT()
{
inorderT(this.root);
}
private void inorderT(Node t)
{
if(t.isLeft())
this.inorderT(t.childLeft());
((Entry)t.getObj()).printEntry();
if(t.isRight())
this.inorderT(t.childRight());
}
public void find(int key)
{
System.out.println("키 값이" + key + " 인 엔트리 출력하기");
find(key,root);
}
private void find(int key, Node temp)
{
Entry entry = ((Entry)temp.getObj());
if(entry.getKey()==key)
{
entry.printEntry();
return;
}
if(temp.isLeaf())
{
System.out.println("찾기 실패");
return;
}
if(entry.getKey()==key)
{
find(key, temp.childLeft());
}
else
{
find(key, temp.childRight());
}
}
}
说错误的句子 是我的问题。 我完全不知道为什么它不起作用 顺便说一句,我是Java语言的新手。所以,如果这是一个愚蠢的问题,请不要责备我:)
答案 0 :(得分:0)
替换
if(((Entry) temp.getObj()).getKey() > entry.getKey()) //error
与
if( temp.getObj())!=null && temp.getObj()).getKey()!=null && ((Entry) temp.getObj()).getKey() > entry.getKey()) //solution
答案 1 :(得分:0)
方法 public void insert(int key,Object obj)如果root为null,则表示正在创建
this.root = new Node(entry, null);
然后如果你将this.root传递给 public void insert(Entry entry,Node temp),你可能会遇到标记为错误的行中的NullPointerException,因为 temp.getObj() 返回null,然后你试图在null对象上调用 getKey()。