StackOverflowError太早了

时间:2016-01-08 15:09:59

标签: java arrays stack-overflow

每当我将size数组提供给3以上时,我的程序就会给我StackOverflowError

package database;

import java.util.Scanner;

public class The_Maximum_Subarray {
    int a[];

    public The_Maximum_Subarray(int size) {
        a=new int[size];
    }

    public int maxsubArray(int[] a,int li,int ui)
    {  
        if(ui ==li)
            return a[li];

        int m=(ui-li)/2;
        int leftMaxSubarray=maxsubArray(a, li, m);
        int rightMaxSubarray=maxsubArray(a, m+1, ui);
        int leftSum=0,rightSum=0,sum=0;

        for(int i=m;i>=li;i--)
        {
            sum+=a[i];
            if(sum>leftSum)
                leftSum=sum;
        }

        sum=0;
        for(int i=m+1;i<=ui;i++)
        {
            sum+=a[i];
            if(sum>rightSum)
                rightSum=sum;
        }
        sum=leftSum+rightSum;

        if(rightMaxSubarray>=leftMaxSubarray && rightMaxSubarray>=sum)
            return rightSum;
        else if(leftMaxSubarray>=rightMaxSubarray && leftMaxSubarray>=sum)
            return leftSum;
        else
            return sum;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);   
        int size=sc.nextInt();
        The_Maximum_Subarray obj=new The_Maximum_Subarray(size);

         for(int j=0;j<size;j++)
             obj.a[j]=sc.nextInt(); 
         System.out.println(obj.maxsubArray(obj.a, 0, size-1)); 
    }
}

有谁能告诉我为什么它会给这个小尺寸阵列这个例外?

1 个答案:

答案 0 :(得分:1)

从你的问题:

  

任何人都可以告诉我为什么它给我这个小尺寸阵列的例外吗?

部分Why it is causing??

根据java的{​​{1}}语言规范,当应用程序过于冗长时会发生此错误。

此递归导致填充堆栈并尝试超出堆栈的限制java.lang.StackOverflowError

举一个简单的例子:

Xs

这里,class StackOverflowDemo { private void causeOverflow(int i) { causeOverflow(i); System.out.println(i); } public static void main(String args[]) { StackOverflowDemo demo = new StackOverflowDemo(); demo.causeOverflow(5); } } 将被递归调用,即在被调用时它将被推送到堆栈。