为什么不是在这个扩展的ArrayList <integer>类中迭代的最后一个元素?</integer>

时间:2014-10-23 20:38:33

标签: java arraylist extends

我正在尝试使用一个简单的类来扩展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);
    }   
}

2 个答案:

答案 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;
    }
}