我正在尝试使用一个简单的类来扩展ArrayList,该类在每次添加值时显示和更新总计。为什么以下面的方式迭代遍历此列表只允许它迭代除了添加到此ArrayList的最后一个元素之外的所有内容?
为什么以下显示我的总数应为6时应为13?
import java.util.*;
public class Test2 {
public static void main (String [] args){
IntStruct ints = new IntStruct();
ints.add(1);
ints.add(5);
ints.add(7);
}
}
class IntStruct extends ArrayList <Integer>{
private int total;
boolean add (int i){
setTotal();
return super.add(i);
}
void setTotal(){
total = 0;
for (int i : this){
System.out.println("Adding " + i + " to our total..");
total = total + i;
}
System.out.println("The total is now " + total);
}
}
答案 0 :(得分:3)
在致电setTotal()
实际添加项目之前,您正在呼叫super.add(i)
,因此在计算新总数时,最新项目不存在。
试试这个:
boolean add (int i) {
if (super.add(i)) {
setTotal();
return true;
}
return false;
}
答案 1 :(得分:1)
与您的问题没有直接关系,但最好不要在列表上进行迭代以计算总数,例如
class IntStruct extends ArrayList <Integer>{
private int total = 0;
boolean add (int i){
return super.add(i);
total += i;
}
}