题意:模拟图书管理系统,首先输入若干图书的标题和作者(标题各不相同,以END结束),然后是若干指令:borrow指令表示借书,return指令表示还书,shelve指令表示把所以已归还但还没有上架的图书排序后插入书架并输入图书标题和插入位置(可能是第一本书或者某本书的后面),图书排序的方法是先按作者从小到大排序,再按标题从小到大排序。在处理第一条指令前,你应当先将所有图书按照这种方式排序。
思路:直接模拟,建立Book{书名,作者},用Vector存下,然后按照规则排序,同时用map记下每本书的作者,shelve的时候吧前面return的书按照上面规则排序,然后存起来到Vector类型的returnBook中,每输出一条,就把第一个数据从returnbook中移除.知道returnbook为空。
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Vector<Book> v = new Vector<>();
Vector<Book> returnbook = new Vector<>();
Map<String,String> map = new HashMap<>();
while(true){
String str = scan.nextLine();
if("END".equals(str))break;
int index = str.indexOf('"', 1);
String bookname = str.substring(1,index);
String author = str.substring(index+5);
v.add(new Book(bookname,author));
map.put(bookname, author);
}
Collections.sort(v, new Cmp());
while(true){
String str = scan.nextLine();
if("END".equals(str))break;
if("SHELVE".equals(str)){
if(!returnbook.isEmpty()){
Collections.sort(returnbook,new Cmp());
Collections.sort(v,new Cmp());
for(int i=0;i<v.size()&&!returnbook.isEmpty();i++){
if(v.get(i).bookname.equals(returnbook.get(0).bookname)){
if(i!=0){
System.out.printf("Put \"%s\" after \"%s\"\n",v.get(i).bookname,v.get(i-1).bookname);
}else{
System.out.printf("Put \"%s\" first\n",v.get(i).bookname);
}
returnbook.remove(0);
}
}
}
System.out.println("END");
}else{
String bookname = str.substring(8,str.length()-1);
String author = map.get(bookname);
if(str.charAt(0)=='B'){
remove(v,bookname);
}
if(str.charAt(0)=='R'){
returnbook.add(new Book(bookname,author));
v.add(new Book(bookname,author));
}
}
}
}
public static void remove(Vector<Book> v,String book){
for(int i=0;i<v.size();i++){
if(v.get(i).bookname.equals(book)){
v.remove(i);
return;
}
}
}
static class Cmp implements Comparator<Book>{
@Override
public int compare(Book o1, Book o2) {
// TODO Auto-generated method stub
if(o1.author.compareToIgnoreCase(o2.author)!=0)
return o1.author.compareToIgnoreCase(o2.author);
else
return o1.bookname.compareToIgnoreCase(o2.bookname);
}
}
static class Book{
String bookname;
String author;
public Book(String bookname,String author){
this.bookname = bookname;
this.author = author;
}
}
}