将元素插入四叉树时出现无限循环问题
Infinite while loop issue while inserting element to quadtree
我试图在单击鼠标时将元素插入到四叉树中。单击鼠标并将点作为参数发送时,我调用插入方法。单击几下后,插入方法中的 while 循环变为无穷大,我找不到原因。
这是方法;
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;
}
}
}
}
如果您需要其余代码,请告诉我。
嗯,您还没有涵盖 point
和 current.point
是同一点,或者水平对齐,或者垂直对齐的情况。在这三种情况下,您的 if
个条件中的 none 个都为真,并且无法退出循环。
您需要将您的 <
条件更改为 <=
或将您的 >
条件更改为 >=
。所以,像
if(point.getX()<=current.point.getX() && point.getY()<=current.point.getY()){
对于您使用 <
.
完成的所有其他比较也类似
这可以确保您的循环可以在 X 值相等或 Y 值相等时退出。
我试图在单击鼠标时将元素插入到四叉树中。单击鼠标并将点作为参数发送时,我调用插入方法。单击几下后,插入方法中的 while 循环变为无穷大,我找不到原因。
这是方法;
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;
}
}
}
}
如果您需要其余代码,请告诉我。
嗯,您还没有涵盖 point
和 current.point
是同一点,或者水平对齐,或者垂直对齐的情况。在这三种情况下,您的 if
个条件中的 none 个都为真,并且无法退出循环。
您需要将您的 <
条件更改为 <=
或将您的 >
条件更改为 >=
。所以,像
if(point.getX()<=current.point.getX() && point.getY()<=current.point.getY()){
对于您使用 <
.
这可以确保您的循环可以在 X 值相等或 Y 值相等时退出。