我正在创建一个偏序集作为 java 中的抽象数据类型,我必须制作数字集的迭代器版本,以及关系的迭代器。现在对于元素,我使用了整数的 HashSet,对于关系,我使用了对的 ArrayList(对是我创建的一个类,它采用 2 个整数作为参数,基本上类似于 (x, y))。我需要创建 2 个迭代器,一个用于 s,一个用于 r,但它们必须遵循一定的顺序,1. 如果 (x, y) 属于R
,那么 s 的迭代器应该在返回 y 之前返回 x 2. 如果(x, y) 和 (y, z) 属于R
,那么 r 的迭代器应该在返回 (y, z) 之前返回 (x, y)
我做了一个辅助方法,首先检查集合中的元素 n 是否是一对中的第一个元素,然后返回它,但我似乎无法检查它是否是第二个元素,我该如何检查第一个元素如果它被退回或没有?
这是我的代码:
private class IntGenerator implements Iterator {
private Iterator<Integer> i;
public IntGenerator () {
i = S.iterator();
}
public boolean hasNext() {
return i.hasNext();
}
public Object next() {
int n = i.next();
for (Pair p : R) {
if (isInFirstElmPair(p, n)) return n;
else (isInSecondElmPair(p, n)) {
// should check for the first element
// if it was returned or not
}
}
}
public void remove() { throw new UnsupportedOperationException(); }
}
我真的很感激任何形式的帮助,或在这段代码中提示。谢谢
编辑:
好的,在添加一个包含返回元素的新集合后,我已经编写了代码,这就是我写的:
Set<Integer> returnedNumbers = new HashSet<Integer> ();
public Object next() {
int n = i.next();
for (Pair p : R) {
if (isInSecondElmPair(p, n)) {
if (returnedNumbers.contains(p.getFirstElm())) {
returnedNumbers.add(n);
return n;
}else{
returnedNumbers.add(p.getFirstElm());
return p.getFirstElm();
}
}else{
returnedNumbers.add(n);
return n;
}
}
}
这段代码正确吗?另外,eclipse似乎给了我一个错误,告诉我我需要在循环外返回一个值,但是我已经在每种情况下都返回了内部,为什么还需要更多?感谢帮助