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判断是否已经是最后一个日期