如何解决我正在尝试实现 compare() 方法,但它说“对象无法转换为书”
我在 compare()
类中实现了 Book
方法,以便根据价格对其进行排序。我已将 Book
元素放在 TreeSet
中并对其进行迭代,但它没有打印。请查看代码:
import java.util.*;
class Demos{
public static void main(String[] args){
Book b1 = new Book("PHP",200.00);
Book b2 = new Book("java",500.00);
Book b3 = new Book("c",400.00);
TreeSet t = new TreeSet();
t.add(b1);
t.add(b2);
t.add(b3);
Iterator it = t.iterator();
Book b;
while(it.hasNext()){
b = it.next();
System.out.println(b.getName()+" "+b.getPrice());
}
}
}
class Book implements Comparator{
private String bname;
private double price;
public Book(String bname,double price){
this.bname = bname;
this.price = price;
}
public String getName(){
return bname;
}
public double getPrice(){
return price;
}
public int compare(Object o1,Object o2){
Book b1,b2;
b1 = (Book)o1;
b2 = (Book)o2;
if(b1.getPrice() > b2.getPrice()){ return 1; }
else{ return -1; }
}
}
输出:
解决方法
- 不要使用原始类型;使用
TreeSet<Book>
和Iterator<Book>
。此外,请考虑使用NavigableSet
或SortedSet
对接口进行编程。 -
TreeSet
需要实现Comparable
,而不是Comparator
。
class Demos{
public static void main(String[] args){
Book b1 = new Book("php",200.00);
Book b2 = new Book("java",500.00);
Book b3 = new Book("c",400.00);
NavigableSet<Book> t = new TreeSet<>();
t.add(b1);
t.add(b2);
t.add(b3);
Iterator<Book> it = t.iterator();
Book b;
while(it.hasNext()){
b = it.next();
System.out.println(b.getName()+" "+b.getPrice());
}
}
}
class Book implements Comparable<Book>{
private String bname;
private double price;
public Book(String bname,double price){
this.bname = bname;
this.price = price;
}
public String getName(){
return bname;
}
public double getPrice(){
return price;
}
public int compareTo(Book o){
return Double.compare(this.price,o.price);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。