set.iterator().......我在哪里错?

博格丹·米特拉(Bogdan Mitrache)

尝试实现SET接口并为Ition方法使用Iterator。在union方法内部,它永远不会进入while循环。它不添加联合方法具有的参数“ set”中的元素。有任何想法吗?:)

包linkedSet;

导入java.util.Iterator; 导入java.util.NoSuchElementException;

导入linkedList.LinearNode;

公共类LinkedSet实现SetADT {

private int size;
private LinearNode<T> front;
private boolean allowNullElement = false;

// /////////////////////////////////////////////////////
private class LinkedSetIterator implements Iterator<T> {

    private LinearNode<T> currentNode;

    public LinkedSetIterator() {
        currentNode = front;
    }

    @Override
    public boolean hasNext() {
        return currentNode == null;
    }

    @Override
    public T next() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        }
        T temp = currentNode.getElement();
        currentNode = currentNode.getNext();
        return temp;
    }
}
///////////////////////////////////////////////////
@Override
public Iterator<T> iterator() {
    return new LinkedSetIterator();

}
public LinkedSet(boolean allowNullElement) {
    size = 0;
    front = new LinearNode<T>();
    this.allowNullElement = allowNullElement;
}

public String toString() {

    String str = "{";
    for (int i = 0; i < size; i++) {
        str += getNode(i).getElement();
        if (i < size - 1) {
            str += (", ");
        }
    }
    return str + "}";

}

private LinearNode<T> getNode(int index) {
    LinearNode<T> current = front;
    for (int i = 0; i < index; i++) {
        current = current.getNext();
    }
    return current;
}

@Override
public void add(T element) {
    if (element == null && !allowNullElement) {
        throw new IllegalArgumentException(
                "Null element is not allowed to add");
    }
    front = new LinearNode<T>(element, front);
    size++;

}

@Override
public T remove(T element) {

    if (!(contains(element))) {
        throw new IllegalStateException();
    }
    T temp = null;
    ;
    for (int i = 0; i < size; i++) {

        temp = getNode(i).getElement();
        if (temp.equals(element) || temp == element) {
            if (i == 0) {
                front = front.getNext();
                break;

            } else {
                getNode(i).setElement(front.getElement());
                front = front.getNext();
                break;
            }
        }
    }
    size--;
    return temp;
}

@Override
public boolean contains(T element) {
    for (int i = 0; i < size; i++) {
        if (getNode(i).getElement() != null
                && getNode(i).getElement().equals(element)) {
            return true;
        }
        if (getNode(i).getElement() == null
                && getNode(i).getElement() == element) {
            return true;
        }
    }
    return false;
}

@Override
public boolean isEmpty() {

    return size == 0;
}

@Override
public int size() {
    return size;
}

@Override
public boolean isSubset(SetADT<T> set) {
    if (set == null) {
        throw new IllegalArgumentException();
    }

    for (int i = 0; i < size; i++) {
        T temp = getNode(i).getElement();
        if (!(set.contains(temp))) {
            return false;
        }
    }
    return true;
}

@Override
public SetADT<T> intersection(SetADT<T> set) {
    if (set == null) {
        throw new IllegalArgumentException();
    }
    LinkedSet<T> temp = new LinkedSet<T>(allowNullElement);

    for (int i = 0; i < size; i++) {

        if (set.contains(getNode(i).getElement())) {
            temp.add(getNode(i).getElement());
        }
    }
    return temp;
}

public SetADT<T> union(SetADT<T> set) {

    if (set == null) {
        throw new IllegalArgumentException();
    }

    LinkedSet<T> temp = new LinkedSet<T>(allowNullElement);
    LinearNode<T> node = front;

    for (int i = 0; i < size; i++) {
        T el = node.getElement();
        temp.add(el);
        node = node.getNext();
    }

    Iterator<T> iterator = set.iterator();
    while (iterator.hasNext()) {
        temp.add(iterator.next());

    }
    return temp;
}

}

D组

如果集合为非空,则LinkedSetIterator.hasNext()方法将返回false可以通过反转条件来纠正此问题:

@Override
public boolean hasNext() {
    return currentNode != null;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我配音的错在哪里?

来自分类Dev

圆角按钮:我在哪里错

来自分类Dev

to_csv,我错在哪里

来自分类Dev

list_iterator类在哪里定义?

来自分类Dev

我从std :: set获取const_iterator而不是迭代器

来自分类Dev

错在哪里?

来自分类Dev

我对ASN1 der的解释在哪里错?

来自分类Dev

使用 javascript 加载和图像。我的语法错在哪里?

来自分类Dev

为什么vector :: iterator和set :: iterator工作不同?

来自分类Dev

什么是`std :: set <int,int> :: iterator`?

来自分类Dev

在SQL中在哪里声明SET?

来自分类Dev

jQuery onclick隐藏根本不起作用,我在哪里错

来自分类Dev

jQuery onclick隐藏根本不起作用,我在哪里错

来自分类Dev

表达式应在左连接附近...请在此查询中我错在哪里

来自分类Dev

set<shared_ptr<T>>::iterator 到 set<shared_ptr<T const>>::const_iterator

来自分类Dev

我想将最后三位设置为零,但我不知道我的代码错在哪里?

来自分类Dev

Windows 10中的文件ini_set在哪里我为什么在此脚本中有错误

来自分类Dev

我如何定义map :: iterator和list :: iterator的列表

来自分类Dev

我如何定义map :: iterator和list :: iterator的列表

来自分类Dev

为什么std :: set似乎强制使用const_iterator?

来自分类Dev

删除std :: set <vector <string >> :: iterator的索引处的值

来自分类Dev

我的过剩在哪里?

来自分类Dev

我的ViewPagerIndicator在哪里?

来自分类Dev

我的游标在哪里?

来自分类Dev

我的游标在哪里?

来自分类Dev

我的TreeView在哪里?

来自分类Dev

我的注释在哪里?

来自分类Dev

我的Cookie在哪里?

来自分类Dev

我的iptables在哪里?