我怎样才能按降序排序

时间:2018-01-30 23:36:58

标签: java

我有这段代码,但它没有给我正确的答案。谁能帮我?它应该按降序排序。我不知道哪个部分是错的。 a.compareto(b)是一种方法,在== b或a> b或a的情况下返回0或1或-1

//This method is supposed to sort in descending order, but is broken!
    public void brokenSort(T[] list){
    int max;
    T temp;

    //visit each spot in the array
    for (int i = 0; i < list.length-1; i++){
        max = i;

        //compare each spot in the array with each item in the unsorted list
        for (int j = i + 1; j < list.length; j++){
            //is the current that is found the new biggest number
            if (list[j].compareTo(list[j-1]) > 0){
                max = j;
            }
        }//forloop
        // Swap the values
        list[max] = list[i];
        list[i] = list[max];
    }//forloop

}

这是比较方法:

public int compareTo(Shape s){

    double a=(int)(s.getPerimeter()/s.getArea());
    double b=(int)(this.getPerimeter()/this.getArea());

    if(a>=b) {
        return 1;
    }

    else if (a==b)
        return 0;
    else
        return -1;
}

我觉得T [i]和T [i-1]无法根据这种方法进行比较!正确?

3 个答案:

答案 0 :(得分:0)

compareTo methon只运行Wrapper Class。 T必须只包装类而不是原始类。 T可以整数,但不能插入。 你的班级改变

class name<T>

class name<T extends Comparable<T>>

答案 1 :(得分:0)

T不能是原始数据类型(int,float,double等),而是T必须是实现Comparable接口的类。

您的排序逻辑似乎是正确的,但是使用compareTo函数进行比较可能会出现问题。

答案 2 :(得分:0)

如上所述,您需要使用Object包装器才能使用compareTo 但是你可以创建自己的比较方法,它接收2个参数进行比较,它们使用相同的逻辑