Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 八叉树堆栈溢出器_Java_Data Structures_Stack Overflow_Octree - Fatal编程技术网

Java 八叉树堆栈溢出器

Java 八叉树堆栈溢出器,java,data-structures,stack-overflow,octree,Java,Data Structures,Stack Overflow,Octree,你好,我正在实现八叉树。但是,当输入大小大于2时,我一直收到StackOverflowerError。我不知道为什么我会犯这个错误 八叉树的实例化 octree = new Octree(3, new Point(0,0,0)); 其中第一个参数是尺寸,第二个参数是根 八叉树总体代码: public void generateList(int num) { for(int i = 0 ; i < num; i++) for (int j = 0 ; j <

你好,我正在实现八叉树。但是,当输入大小大于2时,我一直收到StackOverflowerError。我不知道为什么我会犯这个错误

八叉树的实例化

octree = new Octree(3, new Point(0,0,0));
其中第一个参数是尺寸,第二个参数是根

八叉树总体代码:

public void generateList(int num)
{
    for(int i = 0 ; i < num; i++)
        for (int j = 0 ; j < num; j++)
            for (int z = 0 ; z < num; z++)
                if (!(z == j && j == i))  {
                    octree.add_nodes(i,j,z);
                }
}

希望有人能回答。谢谢

我不是100%确定,因为我看不到代码的其余部分,但它看起来像是您在
I>=8时输入的
add_nodes()
。从那时起,您的控制流将显示

如果(this.childNodes==null)
,执行一些操作,然后调用
添加节点()

否则如果(childNodes!=null)
,请执行一些操作,然后调用
添加节点()

无论哪种方式,如果
i
不小于8,则调用
add_nodes()
,并且由于您从不递减
i
,因此后续的每个调用也将调用
add_nodes()

每次调用方法时,新方法的框架都会添加到堆栈上。当堆栈最终变得太大时,就会发生错误。由于您假设调用
add_nodes()
无限次,因此每次调用都会使堆栈稍微增长,直到它变得太大,从而导致异常

顺便说一句:我有点困惑为什么你把
childNodes
称为
this.childNodes
,也就是
childNodes
通常只有当您有两个范围不同但名称相同的变量时,才需要此
,而此处没有。你可能也想好好温习一下

public boolean add_nodes(double x, double y, double z) {

    boolean success = false;
    System.out.println(x+","+y+","+z);
    if (this.i < 8) {
        if (compare(x, y, z)) {
            if (root.childPoints == null) {
                System.out.println("Root is null" + x + " " + y + " " + z);
            }

            this.root.childPoints[i] = new Point(x, y, z);
            this.i++;
            success = true;
        }
    }

    else if (this.childNodes == null) {

        this.create_nodes_of_nodes(x, y, z);

        for (int j = 0; j < 8; j++) {
            double tempx = this.root.x - root.childPoints[j].x;
            double tempy = this.root.y - root.childPoints[j].y;
            double tempz = this.root.z - root.childPoints[j].z;

            int checker = compareValues(tempx, tempy, tempz);

            this.childNodes[checker].add_nodes(root.childPoints[j].x,
                    root.childPoints[j].y, root.childPoints[j].z);

        }
        root.childPoints = null;

        double tempx = this.root.x - x;
        double tempy = this.root.y - y;
        double tempz = this.root.z - z;
        int checker = compareValues(tempx, tempy, tempz);
        this.childNodes[checker].add_nodes(x, y, z);
        // this.i=0;
    }

    else {

        if (childNodes != null) {
            int checker = compareValues(x, y, z);
            childNodes[checker].add_nodes(x, y, z);

        }
    }

    return success;
}
Exception in thread "main" java.lang.StackOverflowError
at sun.misc.FloatingDecimal$BinaryToASCIIBuffer.appendTo(FloatingDecimal.java:307)
at sun.misc.FloatingDecimal.appendTo(FloatingDecimal.java:89)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:709)
at java.lang.StringBuilder.append(StringBuilder.java:226)
at edu.modesta.test.octree.Octree.add_nodes(Octree.java:73)
at edu.modesta.test.octree.Octree.add_nodes(Octree.java:97)
at edu.modesta.test.octree.Octree.add_nodes(Octree.java:107)
at edu.modesta.test.octree.Octree.add_nodes(Octree.java:107)
at edu.modesta.test.octree.Octree.add_nodes(Octree.java:107)
and an additional 400 lines of at 
edu.modesta.test.octree.Octree.add_nodes(Octree.java:107) error