为什么我的迭代器remove()方法没有删除任何东西?

时间:2015-10-25 04:49:49

标签: java arrays while-loop iterator

我正在尝试使用迭代器标准的remove方法来删除数组中的最小项。我这样做是通过实现迭代器来查找最小的项,然后是第二个迭代器来删除它。我的代码如下。

public Comparable removeMin() {

    Iterator<T> it = iterator();
    T min;
    T next;


    if (it.hasNext()){
        min = it.next();
    } else {
        min = null;
    }

    while (it.hasNext()) {
        next = it.next();
        if (min.compareTo(next) > 0) {
        min = next;
        }
    }

    Iterator<T> it2 = iterator();
    it2 = iterator();
    while (it2.hasNext()) {
        next = it2.next();
        if (min.compareTo(next) == 0) {
            it2.remove();
            break;
        }
    }

    return min;

}

这里的代码是主要的。

public static void main(String[] args) {

  Bag<String> sbag = new Bag<String>();
    System.out.println(sbag.size()); // 0

    sbag.add("a");
    sbag.add("b"); 
    sbag.add("c");
    sbag.add("d");
    sbag.add("e");

    sbag.removeMin();

    Iterator<String> it2 = sbag.iterator();
    while (it2.hasNext()) {
        String val = it2.next();
        System.out.println(val);

    }
}

当我在main中运行该代码时,我希望得到b, c, d, e,因为a应该被删除。相反,我得到a, b, c, d, e。这表明removeMin()方法无法正常工作。我认为故障发生在使用it2.remove()命令的第二个while循环中,但我不知道我做错了什么。

有人可以告诉我如何修复我的代码,以便it2.remove();命令删除最小项吗?

1 个答案:

答案 0 :(得分:0)

我能够通过使用for循环而不是迭代器来解决这个问题。我的代码如下。

public Comparable removeMin() {
  Iterator<T> it = iterator();
    T min;
    T next;


    if (it.hasNext()){
        min = it.next();
    } else {
        min = null;
    }


    while (it.hasNext()) {
        next = it.next();
        if (min.compareTo(next) > 0) {
        min = next;
        }
    }

    for (int i=0; i<size; i++) {
    if (data[i] == min) {
        data[i] = null;

        for (int j = i+1; j < data.length; j++) {
            data[j-1] = data[j];
        }

      }

    }

    size--;
    return min;

}
相关问题