实现Remove方法Java

时间:2013-01-31 16:57:11

标签: java object junit arraylist

我正在使用几个类的实现,但我似乎无法使其中的一部分工作。 我正在使用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);
}
}

}

3 个答案:

答案 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);
}