书籍排序及查找
Problem Description
1.实验目的
(1) 掌握容器的排序及查找
2.实验内容
编写Book类,含书名name、价格price属性及相应get、set方法,接着完成类Helper的input方法完成书籍输入(注意输入串要含有书名及价格两类信息)进Book对象,并存储进容器bookList,接着对bookList排序,并查找某本书是否在bookList中并给出信息提示。
3.实验要求
请将下列代码补充完整(完成Helper类的编写)
import java.util.*;
public class Main{
public static void main(String args[]){
linkedList bookList=new linkedList();
Helper helper = new Helper();
// 输入数据
helper.input(bookList);
// 排序
helper.sort(bookList);
// 查找:产生一本新书,然后查和它重复的书并给出提示
Book newBook=new Book();
newBook.setPrice(29);
newBook.setName("Java");
Book searchBook=newBook;
helper.query(bookList,searchBook);
}
}
class Book implements Comparable{
double price;
String name;
public void setPrice(double c){
price=c;
}
public double getPrice(){
return price;
}
public void setName(String n){
name=n;
}
public String getName(){
return name;
}
public int compareTo(object object){
Book bk=(Book)object;
int difference=(int)(this.getPrice()-bk.getPrice());
return difference;
}
}
// 你的代码
Input Description
java,29;c,35;python,56;r,37
Output Description
(1) 书籍列表中有该书,则显示:
new book,Java(29.0),same as the following books: java(29.0).
(2) 书籍列表中没有该书,则显示:
new book,Java(29.0),same as the following books: not exist.
Hint
输入一行书籍信息字符串,分类信息用;或,隔开,因此解析时要用到数组及split方法,提示如下:
Scanner cin=new Scanner(System.in);
String[] s1 = cin.next().split(";");
String [][]s2=new String[s1.length][];
for(int i=0;i<s1.length;i++){
s2[i] = s1[i].split(",");
}
解题代码
// Helper类 处理存放书籍链表
class Helper{
// input()方法接收书籍输入 存入传进来的LinkedList对象
public void input(LinkedList bookList){
// 创建Scanner对象 接收控制台输入
Scanner in = new Scanner(System.in);
// 接收一行输入
String line = in.nextLine();
// 使用;切割 获取字符串数组 数组中的每一个元素为一个书籍信息
String[] strs = line.split(";");
// 遍历数组
for(String s:strs){
// 使用,分割获取每本书籍的具体信息
String[] infos = s.split(",");
// 创建Book对象
Book book = new Book();
// 设置书名
book.setName(infos[0]);
// 设置价格
book.setPrice(Double.parseDouble(infos[1]));
// 将书籍对象放入list集合
bookList.add(book);
}
}
// 排序方法
public void sort(LinkedList bookList){
// 由于Book已经实现了 Comparable接口
// 这里直接使用Collections.sort对象LinkedList中的书籍信息进行排序
Collections.sort(bookList);
}
// query()方法 根据传递的Book对象在LinkedList查找是否有相同的书籍
public void query(LinkedList bookList,Book book){
// 索引 -1代表没有
int index = -1;
// 遍历存放Book信息的LinkedList 查找书籍信息
for (Object b: bookList){
// 由于LinkedList存放的为Object 需要将Object类型强制转换为Book类型
Book book1 = (Book) b;
// 如果书籍名称相同 获取书籍的索引
if (book1.getName().equalsIgnoreCase(book.getName())) index = bookList.indexOf(book1);
}
// 如果index不是-1 代表有同名书籍
if (index != -1) {
// 打印相关信息
System.out.println("new book," + book.getName() +"(" + book.getPrice() +"),same as the following books: " + ((Book)bookList.get(index)).getName() +"(" + ((Book)bookList.get(index)).getPrice() +").");
// 否则代表没有同名书籍
}else {
// 打印相关信息
System.out.println("new book," + book.getName() +"(" + book.getPrice() +"),same as the following books: not exist.");
}
}
}