(OJ)Java容器-书籍排序及查找

书籍排序及查找

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.");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40856560/article/details/112604162