java - 如果添加单词/数字的顺序发生变化,我的“最小方法”会给出不同的结果

标签 java compareto

所以基本上我的代码正在做问题所说的事情。按照代码现在的布局方式,它给出了正确的结果,但是当我更改 .add 代码片段的顺序时,它每次都会给出不同的结果。我觉得 compareTo 方法很好,但是我错过了什么吗?我正在努力获得最小的结果。

提前致谢。

package lists;

import java.util.*;

public class Lab4 {
    public static <T extends Comparable> int smallest(List<T> l) {
        if (l.size() == 0) 
            return -1;
        else {
            Iterator<T> it = l.iterator();
            T smallestSoFar = it.next();
            T temp;

            int smallestPos = 0;
            int i = 0; //used to indicate position in list of next item
            while (it.hasNext()) {
                temp = it.next();

                if (temp.compareTo(smallestSoFar) > 0) {
                    smallestSoFar = temp;
                    smallestPos++;
                }
                i++;
            }

            return smallestPos;
        }
    }

    public static <T extends Comparable> void deleteSmallest(List<T> l) { // for exercise 3
    }

    public static void main(String[] args) {
        Vector<String> vec1 = new Vector<String>();
        vec1.add("Hello");
        vec1.add("xxxx");
        vec1.add("world");
        vec1.add("aardvark");

        int smallPos = smallest(vec1);
        if (smallPos != -1)
            System.out.println("smallest entry is " + vec1.elementAt(smallPos) + " at position " + smallPos);
        Vector<Integer> vec2 = new Vector<Integer>();

        vec2.add(new Integer(47));
        vec2.add(new Integer(247));
        vec2.add(new Integer(17));
        vec2.add(new Integer(399));

        smallPos = smallest(vec2);
        if (smallPos != -1)
            System.out.println("smallest entry is " + vec2.elementAt(smallPos) + " at position " + smallPos);
    }
}

最佳答案

你的比较测试是错误的。目前您正在选择最大的值。

if (temp.compareTo(smallestSoFar) > 0) {

应该是

if (temp.compareTo(smallestSoFar) < 0) {

另外,smallestPos++;应该是smallestPos=i;

当前您正在返回“最小”值更改的次数。

关于java - 如果添加单词/数字的顺序发生变化,我的“最小方法”会给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45390168/

相关文章:

java - java中使用compareTo()方法比较大小写

java - 执行 org.apache.maven.plugins :maven-shade-plugin:1. 3.1 :shade: java. lang.AbstractMethodError: null 时遇到 API 不兼容

java - 使用不同类型的参数设计服务java

java - Eclipse:查找方法的调用树

c# - IComparable<T>.CompareTo 与 Sort 中的 null 进行比较

java - 如何计算今年年初以来的星期一数?

具有毫秒精度但可选微秒精度的 Java LocalDateTime.parse

java - LibGDX 点 Sprite 蜂群的正确方法?

java - 如何使用比较器和迭代器对整数 vector 进行排序?

java - 比较方法