import java.util.*;
public class TestPerson{
public static void main(String[] args){
person Albert = new Person(1);
person James = new Person(2);
person Elizabeth = new Person(3);
person [] personArray = new Person[3];
personArray[0] = Albert;
personArray[1] = James;
personArray[2] = Elizabeth;
Arrays.sort(personArray);
System.out.println(personArray[0].number);
System.out.println(personArray[1].number);
System.out.println(personArray[2].number);
}
}
public class Person implements Comparable{
int number;
public Person(int number){
this.number = number;
}
public int compareTo(Object o){
if(!(o instanceof person)){
System.out.println("error");
System.exit(1);
person newObject = (person) o;
if (this.number > newObject.number){
return 1;
}
else if(this.number == newObject.number){
return 0;
}
}
return -1;
}
}
我很困惑为什么输出会向后排序:3,2,1。当 this.number>number 时,我的compareTo 方法返回一个正数,所以这不应该确保数字按从小到大的顺序排序吗? 谢谢
您的
compareTo
方法有一个错误,它总是返回 -1。但是,您可以通过实现 compareTo
而不是 Comparable<Person>
来大大简化您的 Comparable
方法:
class Person implements Comparable<Person> {
public int compareTo(Person other) {
return this.number - other.number;
}
}
您只需将
compareTo
方法更改为以下内容,这样,如果传递的不是 person
的实例,它会返回错误,否则它将转换传递的对象并进行比较:
public int compareTo(Object o){
if(!(o instanceof person)){
System.out.println("error");
System.exit(1);
}
person newObject = (person) o;
if (this.number > newObject.number){
return 1;
}
else if(this.number == newObject.number){
return 0;
}
return -1;
}