作業提交,供大家參考
其中,需要另外創建一個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(); ????????????????????} ????????} }
2019-12-20
關于scanner.close(),不可以用try with resource 來自動關閉嗎,大部分輸入輸出流都繼承了那個自動關閉接口,應該可以用吧
2019-10-08
為什么沒有throws 異常類就可以直接拋出異常,不懂throws和throw的關系,請指教
2019-10-07
2019-08-06
寫的很清晰
2019-07-24
2019-07-22
大佬,你的后面有兩個catch,前面只有一個try怎么沒有報錯0-0。麻煩大佬幫忙解惑一下,謝謝哦
2019-06-11
import
?java.util.Set;
import
?java.util.HashSet;前面幾章有這兩個????
2019-05-20
給你點贊? 互相學習