如何从Java中的数据数组中删除最小项?

时间:2015-10-25 02:22:03

标签: java arrays

我正在做一个家庭作业,我需要编写一个方法来获取数据数组并从中删除最小项。我能找到最小的项目,但我无法删除它。我的代码如下。

  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)。如何修复我的代码,以便它不仅可以找到最小项目,还可以删除它?

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}}