私はいくつかのクラスの実装に取り組んでいますが、その一部が機能していないようです。Junit
実装が正しいかどうかを確認するために使用していますが、修正するエラーが1つしかありません。
これは、説明に記載されているように、remove
メソッドを実装することになっているように、正しくないように見える部分ですが、私が知る限り、実際には削除されません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;
}
これが私の現在のコードです:
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;
}
しかし、意図したとおりに機能しません。
このクラスを別のクラスから実装しているため、super を使用しています。また、同じ削除部分を持つ他のクラスは、同じコード スニペットで動作しました。
すべてのソースコードは次のとおりです。
私が実装しようとしている MaxSet クラス:
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);
}
}
ArraySet 親クラス:
package set;
import java.util.ArrayList;
import java.util.Iterator;
public class ArraySet<E> implements SimpleSet<E> {
protected ArrayList<E> set;
public ArraySet() {
set = new ArrayList<E>();
}
public boolean add(E x) {
if(!set.contains(x)) {
return set.add(x);
}
return false;
}
public boolean remove(Object x) {
if(set.contains(x)){
return set.remove(x);
}
return false; //?
}
public boolean contains(Object x) {
if(set.contains(x)){
return true;
}
return false;
}
public boolean isEmpty() {
if(set.isEmpty()){
return true;
}
return false;
}
public int size() {
return set.size();
}
public Iterator<E> iterator() {
return set.iterator();
}
public boolean addAll(SimpleSet<? extends E> s) {
Iterator<? extends E> it = s.iterator();
boolean changed = false;
while (it.hasNext()) {
changed = changed || add(it.next());
}
return changed;
}
}