我刚开始使用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;
}
答案 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);