我正在使用几个类的实现,但我似乎无法使其中的一部分工作。
我正在使用Junit
检查我的实现是否正确,我只剩下一个错误要纠正。
这是我似乎无法正确理解的部分,如说明中所述,我应该实现remove
方法,但据我所知,它实际上并没有删除{{1} }:
x
这是我目前的代码:
/**
* Removes the specified element from this set if it is present.
* post: x is removed if it was present
* @param x the element to remove - if present
* @return true if the set contained the specified element
*/
public boolean remove(Object x) {
return false;
}
但它不会按预期工作。
我正在从另一个类实现这个类,这就是我使用super的原因。 而另一个具有相同删除部分的类使用相同的代码片段。
以下是所有源代码:
我正在尝试实现的MaxSet类:
public boolean remove(Object x) {
if(super.remove(x)){
if( maxElement == x ){
updateMax();
}
return true;
}
return false;
}
private void updateMax() {
E newMax = set.get(0);
for ( E x : set){
if (x.compareTo(newMax) > 0) {
newMax = x;
}
}
maxElement = newMax;
}
ArraySet父类:
package set;
import java.util.NoSuchElementException;
public class MaxSet<E extends Comparable<E>> extends ArraySet<E> {
private E maxElement;
public MaxSet() {
super();
}
public E getMax() {
if (isEmpty()) {
throw new NoSuchElementException();
}
return maxElement;
}
public boolean add(E x) {
if (isEmpty()) {
maxElement = x;
} else if (x.compareTo(maxElement) > 0) {
maxElement = x;
}
return super.add(x);
}
public boolean remove(Object x) {
if(set.contains(x)){
set.remove(x);
return remove(x); // true if the set contained the specified element
}
return super.remove(x);
}
public boolean addAll(SimpleSet<? extends E> c) {
return super.addAll(c);
}
}
}
答案 0 :(得分:2)
答案 1 :(得分:2)
我会选择这样的事情:
public boolean remove(Object x) {
if(super.remove(x)){
if( maxElement == x ){ /* find new maxElement here */ }
return true;
}
return false;
}
答案 2 :(得分:1)
我认为你的逻辑存在一些问题,试试这个问题
public boolean remove(Object x) {
if(set.contains(x)){
set.remove(x);
return true; // true if the set contained the specified element
}
return super.remove(x);
}