我试图在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);
}
答案 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为零答案 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++; } }
希望这会对你有所帮助。