package?com.kandy.class8;
public?class?Book?{
????private?String?name;
????private?int?id;
????public?String?getName()?{
????????return?name;
????}
????public?Book(int?id,String?name)?{
????????this.name?=?name;
????????this.id?=?id;
????}
????public?void?setName(String?name)?{
????????this.name?=?name;
????}
????public?int?getId()?{
????????return?id;
????}
????public?void?setId(int?id)?{
????????this.id?=?id;
????}
}
package?com.kandy.class8;
public?class?BookNotFindExeption?extends?Exception{
????public?BookNotFindExeption(){}
????public?BookNotFindExeption(String?message)?{
????????super(message);
????}
}
package?com.kandy.class8;
import?java.util.Scanner;
public?class?InitialBook?{
????//創建圖書
????Book[]?books?=?{
????????????new?Book(1,?"語文"),
????????????new?Book(2,?"數學"),
????????????new?Book(3,?"英語"),
????};
????//輸入
????Scanner?input;
????//顯示圖書菜單,進入查找分類
????public?void?showMenu()?{
????????try?{
????????????System.out.println("借書請按編號或書名(1:按編號/2:按書名)");
????????????System.out.println("編號\t\t?書名");
????????????for?(Book?book?:?books)?{
????????????????System.out.println("?"?+?book.getId()?+?"\t\t《"?+?book.getName()?+?"》");
????????????}
????????????System.out.print("請輸入1或2,0退出:");
????????????input?=?new?Scanner(System.in);
????????????int?num?=?input.nextInt();
????????????switch?(num)?{
????????????????case?0:
????????????????????System.exit(0);
????????????????????break;
????????????????case?1:
????????????????????findForId();
????????????????????break;
????????????????case?2:
????????????????????findForName();
????????????????????break;
????????????????default:
????????????????????showMenu();
????????????}
????????}?catch?(Exception?e)?{
????????????System.out.println("輸入有誤,請根據提示輸入。");
????????????showMenu();
????????}?finally?{
????????????input.close();
????????}
????}
????//按編號查找
????public?void?findForId()?{
????????try?{
????????????System.out.print("請輸入圖書的編號,輸入0返回上一級:");
????????????input?=?new?Scanner(System.in);
????????????int?num?=?input.nextInt();
????????????if?(num?==?0)?showMenu();
????????????boolean?isFind?=?false;
????????????for?(Book?book?:?books)?{
????????????????if?(book.getId()?==?num)?{
????????????????????isFind?=?true;
????????????????????System.out.println("********找到圖書:(編號:"?+?book.getId()?+?"書名:"?+?book.getName()?+?")");
????????????????????showMenu();
????????????????????break;
????????????????}
????????????}
????????????if?(!isFind)?{
????????????????throw?new?BookNotFindExeption("未找到此編號的圖書!");
????????????}
????????}?catch?(BookNotFindExeption?e)?{
????????????System.out.println(e.getMessage());
????????????findForId();
????????}?catch?(Exception?e)?{
????????????System.out.println("輸入有誤,請根據提示輸入。");
????????????findForId();
????????}?finally?{
????????????input.close();
????????}
????}
????//按書名查找
????public?void?findForName()?{
????????try?{
????????????System.out.print("請輸入圖書的名稱,輸入0返回上一級:");
????????????input?=?new?Scanner(System.in);
????????????String?name?=?input.nextLine();
????????????if?(name.equals("0"))?showMenu();
????????????boolean?isFind?=?false;
????????????for?(Book?book?:?books)?{
????????????????if?(book.getName().equals(name))?{
????????????????????isFind?=?true;
????????????????????System.out.println("*********找到圖書:(編號:"?+?book.getId()?+?"書名:"?+?book.getName()?+?")");
????????????????????showMenu();
????????????????????break;
????????????????}
????????????}
????????????if?(!isFind)?{
????????????????throw?new?BookNotFindExeption("未找到此名稱的圖書!");
????????????}
????????}?catch?(BookNotFindExeption?e)?{
????????????System.out.println(e.getMessage());
????????????findForName();
????????}?catch?(Exception?e)?{
????????????System.out.println("輸入有誤,請根據提示輸入。");
????????????findForName();
????????}?finally?{
????????????input.close();
????????}
????}
????//程序入口
????public?static?void?main(String[]?args)?{
????????InitialBook?in?=?new?InitialBook();
????????//顯示圖書列表
????????in.showMenu();
????}
}
2020-01-16
?真的牛,不過用遞歸,可能會造成內存溢出,就是一直按住回車的情況下