亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么在捕捉到異常后調用findways(book)會出錯

package?findbook;
import?java.util.InputMismatchException;
import?java.util.Scanner;
public?class?Find?{

????public?static?void?main(String[]?args)?throws?Nobook?{
????????//?TODO?自動生成的方法存根
????????String[]?book=?{"高數","英語","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("請輸入整數?。。?);
????????????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("請輸入整數?。。?);
????????????????findways(book);
????????????}catch(Nobook?e)?{
????????????????System.out.println(e.getMessage());
????????????????findways(book);
????????????}
????}
}

//自定義異常
package?findbook;

public?class?Nobook?extends?Exception{
????public?Nobook(){
????????System.out.println("圖書不存在!");
????}
}

https://img1.sycdn.imooc.com//5bde60bf0001272004310158.jpg

正在回答

1 回答

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

0 回復 有任何疑惑可以回復我~
#1

劉老A 提問者

謝謝!我試了一下,確實可以;這個代碼我把每個方法里的in.close()去掉好像也可以運行成功。
2018-11-04 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么在捕捉到異常后調用findways(book)會出錯

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號