我正在尝试使用迭代器标准的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();
命令删除最小项吗?
答案 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;
}