使用arraylist的最大非负子阵列

时间:2016-06-14 03:41:31

标签: java arraylist

我试图在java中使用arraylist来解决这个问题 但是有一些错误。你能告诉我做错了什么吗? 我使用eclipse indigo并显示以下错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  at java.util.ArrayList.rangeCheck(Unknown Source)
  at java.util.ArrayList.get(Unknown Source)
  at hackerrank.maxsub(hackerrank.java:32)
  at hackerrank.main(hackerrank.java:16)
private static ArrayList<Integer> maxsub(int[] input) {
    ArrayList<ArrayList<Integer>> temp=new ArrayList<ArrayList<Integer>>();
    int j=0;
    Integer[] sumarray=new Integer[temp.size()];
    for(int i=0;i<input.length;i++)
    {

        if(input[i]>=0)
        {
            temp.get(j).add(input[i]);
            sumarray[j]=sumarray[j]+input[i];
        }
        else
        {
            j++;
        }

    }
    int maxsum=Integer.MIN_VALUE;
    int indexofmaxsum=-1;
    for(int a=0;a<sumarray.length;a++)
    {
        if(sumarray[a]>maxsum)
        {
            maxsum=sumarray[a];
            a=indexofmaxsum;
        }
    }

    return temp.get(indexofmaxsum);
}

3 个答案:

答案 0 :(得分:2)

您的问题出在以下声明中:

temp.get(J)。新增(输入[1]);

你已经创建了一个ArrayList的Arraylist(包含整数),

ArrayList<ArrayList<Integer>> temp=new ArrayList<ArrayList<Integer>>();

并且您没有添加任何元素(在这种情况下为整数的ArrayList)并尝试使用 temp.get(j) .add(input [i])获取元素;

你也会遇到问题

  Integer[] sumarray=new Integer[temp.size()];

因为你已经实例化了一个大小为0的数组(因为temp是空的)。并且

  sumarray[j]=sumarray[j]+input[i]; 

这也会导致同样的异常

答案 1 :(得分:0)

在分配给 sumarray

之前,您应该知道temp.size为零

Integer [] sumarray = new Integer [temp.size()];

答案 2 :(得分:0)

复制部分代码

ArrayList<ArrayList<Integer>> temp=new ArrayList<ArrayList<Integer>>();
    int j=0;
    Integer[] sumarray=new Integer[temp.size()];
    for(int i=0;i<input.length;i++)
    {

        if(input[i]>=0)
        {
            temp.get(j).add(input[i]);
            sumarray[j]=sumarray[j]+input[i];
        }
        else
        {
            j++;
        }

    }
    在使用之前,似乎没有填充
  1. temp ,因此调用 get(0)必须抛出null异常。
  2. 内部ArrayList实例未初始化。调用 add()函数也会产生空指针异常警报。

希望这会对你有所帮助。