0

クラスを実装する必要がある演習を行っていますが、説明を理解するのに苦労しています。

これは説明/演習です:

 * Adds all of the elements in the specified set, for which it is
 * possible, to this set.
 * post: all elements, for which it is possible, in the
 * specified set are added to this set.
 * @return true if this set changed as a result of the call

そして、これが答えです

public boolean addAll(SimpleSet<? extends E> s) {
    Iterator<? extends E> it = s.iterator();
    boolean changed = false;
    while (it.hasNext()) {
        changed = add(it.next());
    }
    return changed;
}

これは私が自分でやろうとしたことですが、私が何をすべきか頭を悩ますのに苦労しました.

public boolean addAll(SimpleSet<? extends E> s){
        Iterator<? extends E> itr = s.iterator();
        while(itr.hasNext()){
            add(itr.next());
        }
    return true;
}

可能な限りの助けに感謝します。

ボビー。

4

2 に答える 2

5

In fact, your answer is not very different to the provided answer, it will add all the elements given. What didn't you consider?

According to the definition of the method it should return a boolean indicating whether if the set changed as a result of the addition of elements. In your implementation, you just return true, which means that you are not considering when the elements your are trying to add already exist in the set. Although the given implementation only checks the last one which is not correct either.

Remember that by definition a Set cannot have repeated elements, so the boolean is there just to let the caller know if something actually changed.

于 2013-01-28T14:51:11.927 に答える
3

コードと提供された回答の違いは、true何も変更されていなくても無条件に を返すことです (セットが変更されたかどうかを返すという規定の要件とは対照的です)。提供された回答には、最後のオブジェクトが受け入れられたかどうかのみを返す (つまり、偽陰性を返す可能性がある) という点で、実際には少し欠陥があります。その行はchanged = changed || add(it.next());.

于 2013-01-28T14:52:08.277 に答える