Comparable接口实现

【问题描述】编写一个Book类,该类至少有name和price两个属性。该类要实现Comarable接口,在接口的compareTo()方法中规定两个Book类实例的大小关系为二者的price属性的大小关系。在主函数中,选择合适的集合类型存放Book类的若干个对象,然后创建一个新的Book类的对象,并检查该对象与集合中的哪些对象相等。

 
【输入形式】每一行输入一个Book类的对象,名字和价格之间用逗号分隔,集合类的输入结束符号是#,然后输入一个新的Book类对象。
 
【输出形式】
显示查找结果,如果找到了,就显示具体对象的信息,没找到,就不显示。
 
【样例输入1】
input several Book,in the end #
yuwen,10
shuxue,12
yingyu,11
#
input a new Book:
kexue,12
 
【样例输出1】
new book:<kexue>as same books
shuxue,12.0
 
【样例输入2】
input several Book,in the end #
yuwen,10
shuxue,12
waiyu,11
#
input a new Book:
kexue,13
 
【样例输出2】
new book:<kexue>as same books
 
【样例说明】
输入和输出的格式要和指定格式严格匹配,否则不得分。
 
【评分标准】
结果完全正确得满分。

代码

import java.util.ArrayList;

import java.util.Iterator;

import java.util.Scanner;

 

class Book implements Comparable<Book> {

 String name;

 double price;

 public Book(String name,double price){

  this.name=name;

  this.price=price;

 }

 public int compareTo(Book b) {

  return (int)(this.price-b.price);

 }

 

}

public class TestBook{

 public static void main(String[] s) {

  String str;

  System.out.println("input several Book,in the end #");

  Scanner in = new Scanner(System.in);

  ArrayList<Book>list=new ArrayList<Book>();

  //可修改动态数组,类型为Book

  while(true) { //无限循环

   str=in.nextLine();

   if("#".equals(str)) {

    break; //"#"结束循环

   }

   String[] info=str.split(",");

   String name=info[0];

   double price=Double.parseDouble(info[1]);

   list.add(new Book(name,price));

  }

  //获取迭代器

  Iterator<Book>it=list.iterator();

  

  System.out.println("input a new Book:");

  str=in.nextLine();

  String[] info=str.split(",");

  String name=info[0];

  double price=Double.parseDouble(info[1]);

  Book book=new Book(name,price);

  

  System.out.println("new book:<"+name+">as same books");

  while(it.hasNext()) { //当前集合还有元素

   Book b=it.next();

   if(book.price==b.price) {

    System.out.println(b.name+","+b.price);

   }

  }

  

 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值