Java中的迭代器问题

时间:2015-04-07 14:02:15

标签: java iterator

首先,为了让您理解这个问题,我将简要解释一下我的项目:

我有一个名为Pair的类,它基本上创建了类型

Pair<String,Double>

并且有getFirst()getSecond()方法分别返回StringDouble值。

然后我有另一个名为Package的类,它基本上包含Pairs列表,并实现Iterable接口,因此我可以通过列表进行迭代:

Package<Pair<String,Double>> package;
List <Pair<String,Double>> list;

我想要的是使用sum doubles Pair iterator()Package

迭代器的定义如下public Iterator<E> iterator() { return this.iterator(); } 类:

Exception in thread "main" java.lang.StackOverflowError
    at Package.iterator(Package.java:98)

我尝试了两种不同的方法,在两种情况下都产生了:

public static double packageWeight(Package<Pair<String, Double>> package) {

    double sum = 0;
    Pair<String, Double> pair;

    while (package.iterator().hasNext()) {

        pair = package.iterator().next();
        sum = sum + pair.getSecond();

    }

    return sum;
}

这是第一个:

public static double packageWeight(Package<Pair<String, Double>> package) {

    double sum = 0;
    Pair<String, Double> pair;

    Iterator<Pair<String,Double>> it = Package.iterator();

    while (it.hasNext()) {

        pair = it.next();
        sum = sum + pair.getSecond();

    }

    return sum;
}

第二个:

{{1}}

我的问题是:  为了得到这个错误,我做错了什么?

2 个答案:

答案 0 :(得分:5)

StackOverflowError的直接原因是您正在调用该方法:

public Iterator<E> iterator() {

        return this.iterator();
    }

您需要在此处调用其他方法,例如return list.iterator()package.iterator()package不是Java中的有效标识符,因为它是关键字)。

答案 1 :(得分:2)

你的第一次尝试是有缺陷的,因为你每次打电话package.iterator()时都要求一个新的迭代器 - 我想你知道这个,因为你写了第二个。

第二个错误更加微妙 - 您需要使用package.iterator()而不是Package.iterator()。第二个不应该工作。

Andy Turner说的是什么。