Java 中的迭代器有问题
Trouble with iterator in Java
首先,为了让您理解这个问题,我将简要解释一下我的项目:
我有一个名为 Pair
的 class,它基本上创建了类型
Pair<String,Double>
并且有一个 getFirst()
和 getSecond()
方法分别返回 String
和 Double
值。
然后我有另一个 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 中不是有效标识符,因为它是关键字)。
首先,为了让您理解这个问题,我将简要解释一下我的项目:
我有一个名为 Pair
的 class,它基本上创建了类型
Pair<String,Double>
并且有一个 getFirst()
和 getSecond()
方法分别返回 String
和 Double
值。
然后我有另一个 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 中不是有效标识符,因为它是关键字)。