微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在尝试实现 compare() 方法,但它说“对象无法转换为书”

如何解决我正在尝试实现 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; }
    }
}

输出

enter image description here

解决方法

  1. 不要使用原始类型;使用 TreeSet<Book>Iterator<Book>。此外,请考虑使用 NavigableSetSortedSet 对接口进行编程。
  2. 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 举报,一经查实,本站将立刻删除。