package?findbook;
import?java.util.InputMismatchException;
import?java.util.Scanner;
public?class?Find?{
????public?static?void?main(String[]?args)?throws?Nobook?{
????????//?TODO?自動生成的方法存根
????????String[]?book=?{"高數(shù)","英語","JAVA","信號"};
????????Find?book1=new?Find();
????????book1.findways(book);
????}
????//查找方法
????public?void?findways(String[]?book)?throws?Nobook{
????????Scanner?in=new?Scanner(System.in);
????????try?{
????????????System.out.println("輸入命令:1-按照名稱查找圖書;2-按照序號查找圖書");
????????????int?a=in.nextInt();
????????????switch(a)?{
????????????case?1:
????????????????findname(book);
????????????????break;
????????????case?2:
????????????????findnumber(book);
????????????????break;
????????????????
????????????}
????????????in.close();
????????}catch(InputMismatchException?e)?{
????????????System.out.println("請輸入整數(shù)?。。?);
????????????findways(book);
????????}
????}
????//按書名查找
????public?void?findname(String[]?book)?throws?Nobook{
????????Scanner?in=new?Scanner(System.in);
????????????System.out.println("輸入圖書名稱:");
????????????String?a=in.nextLine();
????????????boolean?flag=false;
????????????try?{
????????????for(int?i=0;i<book.length;i++)?{
????????????????if(a.equals(book[i]))?{
????????????????????System.out.println("book:"+book[i]);
????????????????????flag=true;
????????????????????break;
????????????????}
????????????}
????????????in.close();
????????????if(!flag)?{
????????????????throw?new?Nobook();
????????????}
????????????}catch(Nobook?e){????
????????????????findways(book);
????????????}
????}
????//按序號查找
????public?void?findnumber(String[]?book)?throws?Nobook{
????????Scanner?in=new?Scanner(System.in);
????????????System.out.println("輸入圖書序號:");
????????????int?a=in.nextInt();
????????????boolean?flag=false;
????????????try?{
????????????for(int?i=0;i<book.length;i++)?{
????????????????if(a==i)?{
????????????????????System.out.println("book:"+book[i]);
????????????????????flag=true;
????????????????????break;
????????????????}
????????????}
????????????in.close();
????????????if(!flag)?{
????????????????throw?new?Nobook();
????????????}
????????????}catch(InputMismatchException?e)?{
????????????????System.out.println("請輸入整數(shù)?。?!");
????????????????findways(book);
????????????}catch(Nobook?e)?{
????????????????System.out.println(e.getMessage());
????????????????findways(book);
????????????}
????}
}
//自定義異常
package?findbook;
public?class?Nobook?extends?Exception{
????public?Nobook(){
????????System.out.println("圖書不存在!");
????}
}

2018-11-04
Scanner作為掃描對象的釋放速度不夠快,遠遠比不上你的程序運行速度,所以你在程序里面多次創(chuàng)建和關(guān)閉Scanner,造成資源還沒有來得及釋放的時候,程序就運行到該處了。這種情況,你可以將Scanner在main()中創(chuàng)建對象,將引用作為參數(shù)給各個函數(shù)用,然后在main()最后一同釋放。