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
编译错误为什么
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
编译错误为什么
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;
}