Java 双自然顺序未按预期工作

Java 双自然顺序未按预期工作,java,unit-testing,Java,Unit Testing,我正在尝试使用泛型实现选择排序。为此,我收到了一个比较器(因为我想在测试时使用方法comparator#naturalOrder()) 问题是,当使用Double数组调用它时,它不起作用,但当使用Integer数组调用它时,它起作用。 以下是我所做的选择排序实现: public static<V> void selectionSort(V[] arr, Comparator<V> cmp){ if (arr == null) throw new I

我正在尝试使用泛型实现选择排序。为此,我收到了一个比较器(因为我想在测试时使用方法
comparator#naturalOrder()

问题是,当使用
Double
数组调用它时,它不起作用,但当使用
Integer
数组调用它时,它起作用。
以下是我所做的选择排序实现:

public static<V> void selectionSort(V[] arr, Comparator<V> cmp){
    if (arr == null)
        throw new IllegalArgumentException("Invalid array, can't be sorted");

    int minIndex = -1;
    for(int i = 0, j; i<arr.length; i++){
        for (j = i; j<arr.length;j++){
            if (minIndex == -1 || cmp.compare(arr[minIndex],arr[j])>0){
                minIndex = j;
            }
        }
        swap(arr, i, minIndex);
    }
}

private static<V> void swap(V[] arr, int i, int j) {
    V aux = arr[i];
    arr[i]=arr[j];
    arr[j]=aux;
}
以下是有效的测试:

@Test
public void selectionSortIntegerTest(){
    arr = new Integer[]{2,5,7,1};
    SelectionSort.selectionSort(arr, Comparator.naturalOrder());
    Assert.assertArrayEquals(new Integer[]{1, 2, 5, 7},arr);
}
奇怪的是,在第一次测试中,数组在
[1]
位置不同,因此两者都从1.2开始,但是
arrDouble[1]
是8.0,这没有任何意义

我收到的断言错误消息:

Arrays first differed at element [1]; 
    Expected :2.5
    Actual   :8.0

minIndex
必须在外部循环的每次迭代中重置为-1。否则,将以前找到的min元素与新元素交换。使用调试器可以很容易地发现此类错误

Arrays first differed at element [1]; 
    Expected :2.5
    Actual   :8.0