问答详情
源自:1-9 经验总结

作业提交,供大家参考

其中,需要另外创建一个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-05-15 22:18

个回答

  • qq_peaceminT陈
    2019-12-20 13:01:38

    关于scanner.close(),不可以用try with resource 来自动关闭吗,大部分输入输出流都继承了那个自动关闭接口,应该可以用吧

  • qq_慕瓜9564016
    2019-10-08 21:24:12

    为什么没有throws 异常类就可以直接抛出异常,不懂throws和throw的关系,请指教

  • Believerone
    2019-10-07 17:46:30

    http://img4.mukewang.com/5d9b094b00015b6603320117.jpg似乎没有考虑输入的命令为1、2之外的整数的情况,不过整体思路很清晰

  • 慕仙4469632
    2019-08-06 09:30:22

    写的很清晰

  • qq_慕码人5248226
    2019-07-24 16:50:25

    https://img3.mukewang.com/5d381b7f0001a7c708280324.jpg无法应用怎么办

  • 明月暖清风
    2019-07-22 19:08:17

    大佬,你的后面有两个catch,前面只有一个try怎么没有报错0-0。麻烦大佬帮忙解惑一下,谢谢哦

  • 小弟有疑问
    2019-06-11 17:11:31

    import java.util.Set;import java.util.HashSet;前面几章有这两个????

  • YY51930460
    2019-05-20 20:56:38

    给你点赞  互相学习