package example02; /* * 2. 定义一个 Person 类。 属性有: 姓名、 收入、 年龄、 书(一本)。 定义一个 Book 类; 属性有: 书名、 价格。 要求用 Comparable 接口实现, 使用 TreeSet<Person>集合存储, 排序规则: A. 先按照收入从高到低排序; B. 收入相等的情况下, 按照年龄从小到大排序; C. 如果收入和年龄都相等, 按照姓名排序, 字典顺序(String 类的 compareTo 方法); D. 如果以上 3 个属性都相等, 按照书排序, 先按照书价格从低到高, 如果书价格相等, 按照书名(字典顺序)。 */ public class Person implements Comparable<Person> { private String name; private int age; private double income; private Book book; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getIncome() { return income; } public void setIncome(double income) { this.income = income; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Book getBook() { return book; } public void setBook(Book book) { this.book = book; } public Person(String name, double income, int age, Book book) { super(); this.name = name; this.income = income; this.age = age; this.book = book; } public Person() { super(); // TODO Auto-generated constructor stub } public int compareTo(Person p) { // 先按照收入从高到低排序 if (income > p.income) { return -1; } else if (income < p.income) { return 1; } else { // 收入和年龄都相等,按照姓名排序 int nameCompare = name.compareTo(p.name); if (nameCompare != 0) { return nameCompare; } } } }改错
时间: 2023-06-15 10:08:01 浏览: 80
在 `compareTo` 方法中,应该加上对年龄和书的排序规则,将代码修改为:
```java
public int compareTo(Person p) {
// 先按照收入从高到低排序
if (income > p.income) {
return -1;
} else if (income < p.income) {
return 1;
} else {
// 收入相等的情况下, 按照年龄从小到大排序
if (age < p.age) {
return -1;
} else if (age > p.age) {
return 1;
} else {
// 如果收入和年龄都相等, 按照姓名排序, 字典顺序(String 类的 compareTo 方法)
int nameCompare = name.compareTo(p.name);
if (nameCompare != 0) {
return nameCompare;
} else {
// 如果以上 3 个属性都相等, 按照书排序, 先按照书价格从低到高, 如果书价格相等, 按照书名(字典顺序)
int bookCompare = book.compareTo(p.book);
return bookCompare;
}
}
}
}
```
阅读全文