小白求教arraylist问题

for(int c=0;c<date1.size();c++){
if(date1.get(c).equals(date1.get(c+1))){
a=(int) value1.get(c);
sum=a+sum;
System.out.println("a:"+a+"sum:"+sum);
}else{
a=(int) value1.get(c);
sum=a+sum;
System.out.println("a:"+a+"sum:"+sum);
date2.add(date1.get(c));
value2.add(sum);
sum=0;
}

    }

我日期数组,判断第一个日期等于下一个日期,判断到最后怎么办,最后一个日期的下一个日期是空的,报数组越界异常

每次判断是否到最后一个日期

 for(int c=0;c<date1.size();c++){
            if(c < date1.size()){
                if(date1.get(c).equals(date1.get(c+1))){
                a=(int) value1.get(c);
                sum=a+sum;
                System.out.println("a:"+a+"sum:"+sum);
            }
        }else{
            if(c < date1.size()){
                a=(int) value1.get(c);
                sum=a+sum;
                System.out.println("a:"+a+"sum:"+sum);
                date2.add(date1.get(c));
                value2.add(sum);
                sum=0;
            }
        }

你的循环体里面同时使用了c,c+1两个位置的值,而结束条件是c<date1.size(),这个条件错误。
如果C是最后一个元素的下标,那么C+1就越界了。修正:

        for(int c=0;c+1<date1.size();c++){
             if(date1.get(c).equals(date1.get(c+1))){
             a=(int) value1.get(c);
             sum=a+sum;
             System.out.println("a:"+a+"sum:"+sum);
             }else{
             a=(int) value1.get(c);
             sum=a+sum;
             System.out.println("a:"+a+"sum:"+sum);
             date2.add(date1.get(c));
             value2.add(sum);
             sum=0;
             }
                }

第一行改成 date1.size()-1 就OK了。因为前一个已经判断了下一个,所以最后一个不用判断

你的代码中,for 语句中有这样的判断:c<date1.size(),就可以保证 c 的值小于日期数组的大小。
在 for 的循环中,也不要出现类似于这样的表达式:c+1。因为它会导致到最后一个元素时,它越界了。

如果要使用 c+1,则需要修改 for 循环的判断,使用 c<date1.size() -1.因为最后一个日期是不可能等于它后面的日期的!不需要判断!!!

for(int c=0;c+1<date1.size();c++){
||
for(int c=0;c+1<date1.size()-1;c++){
即可

判断一下数组的长度,然后决定做几次比较

加个if判断是否已经是最后一个日期