为了账号安全,请及时绑定邮箱和手机立即绑定

作业提交,供大家参考

其中,需要另外创建一个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下载
官方微信