其中,需要另外创建一个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(); } } }
关于scanner.close(),不可以用try with resource 来自动关闭吗,大部分输入输出流都继承了那个自动关闭接口,应该可以用吧
为什么没有throws 异常类就可以直接抛出异常,不懂throws和throw的关系,请指教
似乎没有考虑输入的命令为1、2之外的整数的情况,不过整体思路很清晰
写的很清晰
无法应用怎么办
大佬,你的后面有两个catch,前面只有一个try怎么没有报错0-0。麻烦大佬帮忙解惑一下,谢谢哦
import
java.util.Set;
import
java.util.HashSet;前面几章有这两个????
给你点赞 互相学习