我正在做一个家庭作业,我需要编写一个方法来获取数据数组并从中删除最小项。我能找到最小的项目,但我无法删除它。我的代码如下。
public Comparable removeMin() {
Iterator<T> it = iterator();
T min = it.next();
while (it.hasNext()) {
T next = it.next();
if (min.compareTo(next) > 0)
min = next;
it.remove();
}
System.out.println(min);
return min;
}
我在那里有print语句只是为了验证它实际上是获得最小项目。
main中的代码看起来像这样。
public static void main(String[] args) {
Bag<String> sbag = new Bag<String>();
sbag.add("Noriko");
sbag.add("Peter");
sbag.add("Buddy");
sbag.add("Mary");
sbag.removeMin();
}
当我运行sbag.removeMin();
命令时,控制台会输出“Buddy”,告诉我它正在选择“Buddy”作为最小项目。但是,如果我用整数填充sbag,它总是打印出最小的整数,这表明我的代码在这方面是正确的。
我有两个问题。
1)。传递如上所述的字符串列表时,Java如何确定哪个最小?
2)。如何修复我的代码,以便它不仅可以找到最小项目,还可以删除它?
答案 0 :(得分:2)
首先,它根据String
中的字符的整数值(例如ASCII)比较String
(但这样做是因为String
实现了Comparable<String>
)。我想你的意思是返回通用类型T
,你应该检查一个空的Collection
。最后,你需要迭代两次。一旦找到min
第二个将其删除。
public T removeMin() {
Iterator<T> it = iterator();
T min = (it.hasNext()) ? it.next() : null;
while (it.hasNext()) {
T next = it.next();
if (min.compareTo(next) > 0) {
min = next;
}
}
it = iterator(); // <-- start again
while (it.hasNext()) {
T next = it.next();
if (min.compareTo(next) == 0) {
it.remove();
break;
}
}
System.out.println(min);
return min;
}
答案 1 :(得分:0)
它使用ASCII码。在数字字节值中,B的值低于您到达那里的任何其他值。
Andto摆脱它,使用{{1}}