Java 中的迭代器有问题

Trouble with iterator in Java

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

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

Pair<String,Double>

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

然后我有另一个 class,名为 Package,它基本上包含在 Pairs 的列表中,并实现了 Iterable 接口,所以我可以迭代槽名单:

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

我想要的是 sum 每个 Pair 上的 doubles,使用 iterator().

Package class:

的迭代器是这样定义的
public Iterator<E> iterator() {

        return this.iterator();
    }

我尝试了两种不同的方法,在这两种情况下都导致了:

Exception in thread "main" java.lang.WhosebugError
    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;
}

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

您的第一次尝试存在缺陷,因为您每次调用时都在请求一个新的迭代器 package.iterator() - 我想您知道这一点,因为您随后编写了第二个迭代器。

第二个问题更微妙 - 您需要使用 package.iterator() 而不是 Package.iterator()。无论如何,第二个应该不起作用。

说了什么。

WhosebugError 的直接原因是您调用了方法本身:

public Iterator<E> iterator() {

        return this.iterator();
    }

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