Java で抽象データ型として部分的に順序付けられたセットを作成しています。数値セットの反復子バージョンと、関係の反復子を作成する必要があります。要素には整数の HashSet を使用し、リレーションにはペアの ArrayList を使用しました (ペアは、基本的に (x, y) のようなパラメーターとして 2 つの int を取るクラスです)。s 用と r 用の 2 つの反復子を作成する必要がありますが、特定の順序に従うR
必要があります。 (x, y) と (y, z) が に属しているR
場合、r の反復子は (y, z) を返す前に (x, y) を返す必要があります。
セット内の要素 n がペアの最初の要素であるかどうかを最初にチェックして返すヘルパー メソッドを作成しましたが、それが 2 番目の要素であるかどうかを確認できないようです。最初の要素を確認するにはどうすればよいですか返されるかどうか?
これが私のコードです:
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 は、ループの外側で値を返す必要があることを示すエラーを表示するようですが、すべてのケースで既に内側に戻っているのはなぜですか? 助けに感謝します