import java.util.Arrays;class Person implements Comparable {
String name;
int age; public Person(String name, int age) {
this.name = name;
this.age = age;
} public int compareTo(Object x) {
String xname = ((Person) x).name;
int xage = ((Person)x).age;
if (!this.name.equals(xname)) {
return this.name.compareTo(xname);
// if(this.name.compareTo(xname) == -1)
// return -1;
// else if(this.name.compareTo(xname) == 1)
// return 1;
}
else {
if(this.age>xage)
return 1;
else if(this.age<xage)
return -1;
else
return 0;
}
} public boolean equals(Object x) {
String xname = ((Person) x).name;
int xage = ((Person) x).age;
return this.name == xname && this.age == xage;
} public String toString() {
return "name: " + name + " " + "age: " + age;
}
}public class Main {
public static void main(String[] args) {
Person[] p = new Person[6];
p[0] = new Person("AAA", 20);
p[1] = new Person("ZZZ", 7);
p[2] = new Person("AAA", 19);
p[3] = new Person("KKK", 8);
p[4] = new Person("LL", 9);
p[5] = new Person("AAB", 100);
for (Person i : p) {
System.out.println(i);
}
Arrays.sort(p);
System.out.println("After Sort:");
for (Person i : p) {
System.out.println(i);
}
}
}
以上代码可以正确的按名字为第一关键字  年龄为第二关键字排序,但是 如果 把
return this.name.compareTo(xname);  注释掉同时释放 下面注释掉的三句,将能正确排序,甚至通不过编译。我的问题是
1.if (!this.name.equals(xname)) 如果 不相等  那么调用compareTo要么返回1 要么-1  但这么写为何会错
// if(this.name.compareTo(xname) == -1)
// return -1;
// else if(this.name.compareTo(xname) == 1)
// return 1;
2. 当
if (!this.name.equals(xname)) {
return this.name.compareTo(xname);
// if(this.name.compareTo(xname) == -1)
// return -1;
// else if(this.name.compareTo(xname) == 1)
// return 1;
}
这样编译可以通过

if (!this.name.equals(xname)) {
// return this.name.compareTo(xname);
if(this.name.compareTo(xname) == -1)
return -1;
else if(this.name.compareTo(xname) == 1)
return 1;
}
这样Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
This method must return a result of type int
编译错误为什么

解决方案 »

  1.   

    虽然没看明白楼主你写的什么但是。。从你的问题中 我感觉到应该是 你的compareTO method  有返回值。而且返回的是整形 。。你怎么可能 让他用equals  让它变成 boolean 呢?
      

  2.   

    This method must return a result of type int
      

  3.   

    return this.name.compareTo(xname); 返回值不为int类型
      

  4.   

                if(this.name.compareTo(xname) == -1)
                    return -1;
                else if(this.name.compareTo(xname) == 1)
                    return 1;
                else
                    return 0;
     //少了一种情况,所以出现没有返回值另外,用return this.name.compareTo(xname); 多简单明了啊
    else {
                if(this.age>xage)
                    return 1;
                else if(this.age<xage)
                    return -1;
                else
                    return 0;
            }也可以改成
    else {
        return this.age-xage;
    }