我的代码中导致堆栈溢出的原因是什么?

时间:2017-05-05 01:41:09

标签: java

我刚开始使用java,所以我尝试做一个添加数组元素的简单程序。 它就这么简单。但是,我不断收到Stack Overflow异常。它是一个简短的代码,但我认真花了将近1个小时试图找出它。 这个页面已经帮了我近1年了,但这次我找不到类似我的情况,所以我直接问。 抱歉我的英语不好,我还在学习。

public static void main(String[] args)
{
    int[] row = {6 , -2 , 1 ,2 ,-8, 1};
    int result = arraySum(0, row.length-1, row);
    System.out.println(result);

}
public static int arraySum(int start, int end, int[] row)
{
    int len = end-start+1;
    if (len == 1)
    {
        return row[start];
    }
    int aux1 = arraySum(start, (len/2)-1, row);
    int aux2 = arraySum(len/2, end, row);
    return aux1 + aux2;
}

2 个答案:

答案 0 :(得分:2)

这不是解决方案,而是一个如何自己找到问题的提示。

在递归方法的开头插入一个print语句,打印参数(无需打印数组)。

public static int arraySum(int start, int end, int[] row)
{
    System.out.println(start + " " + end);
    // rest of method
}

输出将显示出错的方法:

0 5
0 2
0 0
1 2
1 0
1 -1
1 -1
... many lines suppressed ...
1 -1
1 -1
Exception in thread "main" java.lang.StackOverflowError
    ... stack trace suppressed ...

这是调试程序的一种方法,您需要学习如何调试。这对程序员来说是一项基本技能。

答案 1 :(得分:0)

您错过了计算中间值索引的偏移量,因此它会无限地调用,直到您的内存耗尽

  int aux1 = arraySum(start, start+(len/2)-1, row);
  int aux2 = arraySum(start+len/2, end, row);