我正在做一个我需要实施课程的练习,并且很难理解解释。
这是解释/练习:
* 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;
}
感谢任何可能的帮助,
波比。
答案 0 :(得分:5)
事实上,你的回答与提供的答案没有太大的不同,它会添加给出的所有元素。你没有考虑什么?
根据方法的定义,它应该返回一个布尔值,指示是否由于添加元素而改变了集合。在您的实现中,您只返回true,这意味着您没有考虑您尝试添加的元素何时已存在于集合中。虽然给定的实现只检查最后一个不正确的实现。
请记住,根据定义,Set不能包含重复的元素,因此布尔值就是让调用者知道某些内容是否实际发生了变化。
答案 1 :(得分:3)
您的代码与提供的答案之间的区别在于您的无条件返回true
,即使没有任何变化(与返回集合是否已更改的规定要求形成对比)。提供的答案实际上也存在轻微缺陷,因为它只返回最后一个对象是否被接受(即它可以返回假阴性),该行应该是changed = changed || add(it.next());
。