我有这段代码,但它没有给我正确的答案。谁能帮我?它应该按降序排序。我不知道哪个部分是错的。 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]无法根据这种方法进行比较!正确?
答案 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个参数进行比较,它们使用相同的逻辑