java - 将元素插入四叉树时出现无限 while 循环问题

标签 java 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 都没有。条件成立,无法退出循环。

您需要更改您的 <条件<=或您的>条件>= 。所以,类似

if(point.getX()<=current.point.getX() && point.getY()<=current.point.getY()){

对于您使用 < 完成的所有其他比较也类似.

这可以确保当 X 值相等或 Y 值相等时循环可以退出。

关于java - 将元素插入四叉树时出现无限 while 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43104945/

相关文章:

c - shapelib 中的 Shapefile 四叉树

c++ - C++ 游戏的四叉树与红黑树?

java - SonarLint 不适用于覆盖和重复?

java - 显示装饰器模式

Python 四叉树

algorithm - 在一组四叉树中找到最佳深度/范围以优化边界框中点的检索

real-time - 确定一个点在哪些多边形中

java - 如何在我的 Gradle JAR 类路径构建脚本中包含 com.sun.tools JAR 并与我的 IDE 同步?

java - NiFi - 如何根据子元素的值获取特定的 DOM 元素

java - Firebase 云通知导致应用程序崩溃