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

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

作業提交,供大家參考

其中,需要另外創建一個NoBookException的類來繼承RuntimeException類。本程序參考過java菜鳥工程師的程序,加以個人修改,如對原代碼有興趣請自行移步。運行過程中,遇到一個有趣的問題,就是程序在運行的過程中,不能關閉scanner,即不能scanner.close(),除非在程序運行結束,也就是在本程序的①第一處和③第三處可以加上,關閉后程序并不在運行。否則,程序將出現錯誤,錯誤如下:

輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書
1
輸出圖書書名:
數據結構
book:數據結構
輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書
Exception?in?thread?"main"?java.util.NoSuchElementException
at?java.base/java.util.Scanner.throwFor(Scanner.java:937)
at?java.base/java.util.Scanner.next(Scanner.java:1594)
at?java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at?java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at?com.booklent.BookLent.BookBorrow(BookLent.java:29)
at?com.booklent.BookLent.BookBorrow(BookLent.java:39)
at?com.booklent.BookLent.main(BookLent.java:16)

歡迎有看法者提出意見!另外附上運行結果如下:

輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書
1
輸出圖書書名:
紅樓夢
com.booklent.NoBookException:?圖書不存在異常
輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書
a
命令輸入錯誤!請根據提示輸入數字命令!
輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書
1
輸出圖書書名:
數據結構
book:數據結構
輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書
2
輸入圖書序號:
5
com.booklent.NoBookException:?沒有此序號的書
輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書
2
輸入圖書序號:
1
book:高數
package?com.booklent;
import?java.util.Scanner;
import?java.util.Set;
import?java.util.Arrays;
import?java.util.HashSet;
import?java.util.InputMismatchException;
public?class?BookLent?{		
????static?String[]?books?=?{"數據結構","高數","計算機"};		
????
????public?static?void?main(String[]?args)?{		
????????//?TODO?Auto-generated?method?stub		
????????BookLent?book?=?new?BookLent();		
????????book.BookBorrow();			
????????}	
????????
????????public?boolean?useSet(String[]?arr,?String?targetValue)?{	????
????????????Set<String>?set?=?new?HashSet<String>(Arrays.asList(arr));	????
????????????return?set.contains(targetValue);	
????????}		
????????
????????public?void?BookBorrow()?{		
????????????try?{			
????????????????System.out.println("輸入命令:1.按照名稱查找圖書;2.按照序號查找圖書");			
????????????????Scanner?input?=?new?Scanner(System.in);			
????????????????int?number?=?input.nextInt();						
????????????????if(number?==?1)?{				
????????????????????System.out.println("輸出圖書書名:");				
????????????????????Scanner?input1?=?new?Scanner(System.in);				
????????????????????String?bookname?=?input1.nextLine();				
????????????????????boolean?bookpres?=?useSet(books,bookname);				
????????????????????if(bookpres)?{					
????????????????????????System.out.println("book:"+bookname);					
????????????????????????//input1.close();①第一處				
????????????????????????}else?{					
????????????????????????//input1.close();②第二處					
????????????????????????throw?new?NoBookException("圖書不存在異常")?;				
????????????????????????}			
?????????????????????}else?if(number?==2)?{				
?????????????????????????System.out.println("輸入圖書序號:");				
?????????????????????????Scanner?input2?=?new?Scanner(System.in);				
?????????????????????????int?booknum?=?input2.nextInt();				
?????????????????????????if(booknum>=0?&&?booknum?<?books.length)?{					
?????????????????????????????System.out.println("book:"+books[booknum]);					
?????????????????????????????//input2.close();③第三處				
?????????????????????????}else?{					
?????????????????????????????//input2.close();④第四處					
?????????????????????????????throw?new?NoBookException("沒有此序號的書");				
?????????????????????????}	
?????????????????????????//input.close();⑤第五處		
??????????????????????}					
????????????????????}catch(InputMismatchException?e){			
????????????????????????System.out.println("命令輸入錯誤!請根據提示輸入數字命令!");	
????????????????????????BookBorrow();		
????????????????????}catch(NoBookException?e){			
????????????????????????System.out.println(e);			
????????????????????????BookBorrow();		
????????????????????}
????????}	
}


正在回答

8 回答

關于scanner.close(),不可以用try with resource 來自動關閉嗎,大部分輸入輸出流都繼承了那個自動關閉接口,應該可以用吧

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

為什么沒有throws 異常類就可以直接拋出異常,不懂throws和throw的關系,請指教

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

http://img1.sycdn.imooc.com//5d9b094b00015b6603320117.jpg似乎沒有考慮輸入的命令為1、2之外的整數的情況,不過整體思路很清晰

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

寫的很清晰

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

https://img1.sycdn.imooc.com//5d381b7f0001a7c708280324.jpg無法應用怎么辦

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

向遠之航 提問者

我在第一句話里面講過,不知道你建了那個類沒有,可以檢查一下。這句話是:其中,需要另外創建一個NoBookException的類來繼承RuntimeException類。
2019-07-24 回復 有任何疑惑可以回復我~

大佬,你的后面有兩個catch,前面只有一個try怎么沒有報錯0-0。麻煩大佬幫忙解惑一下,謝謝哦

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

向遠之航 提問者

第一個catch是java自帶的,輸入類型不匹配的錯誤捕捉,InputMismatchException。第二個是catch是在前面拋出了這種異常,throw new NoBookException("沒有此序號的書"),所以有兩個catch。
2019-07-22 回復 有任何疑惑可以回復我~
#2

明月暖清風 回復 向遠之航 提問者

好的,謝謝大佬。我再參考一下您的,研究研究
2019-07-22 回復 有任何疑惑可以回復我~

import?java.util.Set;import?java.util.HashSet;前面幾章有這兩個????

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

向遠之航 提問者

java第三季的集合框架上有講解Set和hashSet,你可以參考以下,后邊再學習。
2019-06-11 回復 有任何疑惑可以回復我~
#2

小弟有疑問 回復 向遠之航 提問者

我就是想不通怎么判斷用戶輸入的跟數組里的是否一樣,卡在這
2019-06-11 回復 有任何疑惑可以回復我~
#3

慕斯0203271 回復 小弟有疑問

equals 來判斷
2019-06-11 回復 有任何疑惑可以回復我~

給你點贊? 互相學習

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

向遠之航 提問者

謝謝!
2019-05-23 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

作業提交,供大家參考

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

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

幫助反饋 APP下載

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

公眾號

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