为什么我的insert方法给出了java.lang.StackOverflowError,而我正在制作Heap。

时间:2014-06-04 08:53:52

标签: java sorting heapsort

我正在制作一个关于堆排序的简单程序。请查看我的代码,让我知道我的错误。也许我正在使用错误的方法。提前致谢。

insert方法有两个参数。整数键是我需要插入的元素,而Integer i是另一个数组中键的索引(即Main类)。

public static void main(String[] args) {
    Integer arr[]={81,67,78,59,32,8,96};
    Main a =new Main();
    for(int i=0;i<arr.length;i++)
    {
    a.insert(arr[i], i);
    }

 public void insert(Integer key, Integer i) {
    int head=0;
    if(temp[head]==null)
    {
    temp[head]=key;
    }
    else
        {
        if(key>=temp[head]){
            Integer j=(2*i)+2;
            i=j;
            insert(key, i);    
        }
        else
        {

        Integer j=(2*i)+1;//Stackoverflow error is coming over here. 
        i=j;
        insert(key,i);
        }
        }
}

2 个答案:

答案 0 :(得分:0)

似乎除了第一个元素之外,插入另一个元素会导致你的方法继续调用自己,因为你的所有执行路径都会导致再次调用该方法,但是当元素为0时会有异常是空的。

答案 1 :(得分:0)

一旦temp [0]不为null并且键大于或等于temp [0],就会遇到无限递归。