我在点击鼠标时试图将元素插入到四叉树中。当鼠标点击并发送点作为参数时,我调用insert方法。几次点击后,插入方法中的循环变为无穷大,我无法找到原因。
这里的方法;
public void insert(Point point){
Node newNode = new Node(point);
if(root==null){
root=newNode;
return;
}
Node current=root;
Node parent=null;
while(true){
parent = current;
System.out.println("a");
if(point.getX()<current.point.getX() && point.getY()<current.point.getY()){
current=current.NW;
if(current==null){
parent.NW= newNode;
return;
}
}
else if(point.getX()>current.point.getX() && point.getY()<current.point.getY()){
current=current.NE;
if(current==null){
parent.NE= newNode;
return;
}
}
else if(point.getX()<current.point.getX() && point.getY()>current.point.getY()){
current=current.SW;
if(current==null){
parent.SW=newNode;
return;
}
}
else if(point.getX()>current.point.getX() && point.getY()>current.point.getY()){
current=current.SE;
if(current==null){
parent.SE=newNode;
return;
}
}
}
}
如果您需要其他代码,请与我们联系。
答案 0 :(得分:1)
好吧,您还没有涵盖point
和current.point
是相同点,或者水平排列或垂直排列的情况。在这三种情况中的每一种情况下,您的if
条件都不是真的,并且无法退出循环。
您需要将<
条件更改为<=
或将>
条件更改为>=
。所以,像
if(point.getX()<=current.point.getX() && point.getY()<=current.point.getY()){
并且类似地使用<
进行的所有其他比较。
这确保您的循环可以在X值相等或Y值相等时退出。