java实现键盘输入n本书,按照价格从低到高输出,如果价格相同则按照书名的自然顺序排序,要求:继续添加输入1,输入其他数字结束;书以对象的形式存在,包含书名和价格两个属性,要求即使直接打印书对象的时候,也能看到书的名字而不是书对象的地址;分别使用自然排序和比较器排序实现效果
时间: 2023-07-15 08:12:55 浏览: 119
这里提供使用比较器排序的Java代码,可以按照价格从低到高输出,如果价格相同则按照书名的自然顺序排序:
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Book {
private String name;
private double price;
public Book(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
@Override
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Book> books = new ArrayList<>();
while (true) {
System.out.println("请输入书名和价格,以空格隔开:");
String name = sc.next();
if (!"1".equals(name)) {
break;
}
double price = sc.nextDouble();
books.add(new Book(name, price));
}
// 比较器排序
Comparator<Book> comparator = new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
if (o1.getPrice() > o2.getPrice()) {
return 1;
} else if (o1.getPrice() < o2.getPrice()) {
return -1;
} else {
return o1.getName().compareTo(o2.getName());
}
}
};
Collections.sort(books, comparator);
// 输出结果
for (Book book : books) {
System.out.println(book);
}
}
}
```
在这个程序中,我们使用了一个 `Comparator` 对象来实现比较器排序。在比较器中,我们首先比较价格,如果价格相同则按照书名的自然顺序排序。然后,我们使用 `Collections.sort` 方法对书的列表进行排序。最后,我们使用一个循环来输出每一本书的信息。
阅读全文