作业问题.当提示输入命令时,输入a(非int类型),就会捕获输入类型错误。按理,它应该能回去循环,重新输入命令,结果它停不下来了。求解
package imooc_java_3_1_9; import java.util.InputMismatchException; import java.util.Scanner; import java.util.*; /* * 1.定义字符串数组保存书籍信息 * * 2.提示用户输入,分别按“书名”和“图书序号”查找图书 * * 3.根据输入的信息进行适当的异常处理 * a.如果输入类型错误,抛出“错误命令异常”,并提示重新输入 * b.如果书名不存在,抛出“图书不存在异常”,并提示重新输入 * c.如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入 */ public class RunThisProject { //根据书名查找图书 public void searchAsName ( String bookName,String [] bookInfo) throws Exception { int checkIfHave = 0;//用于计数,若存在和书名一样的书则+1 //遍历图书信息数组,和输入的书名比对,若书名存在,则输出书名,否则抛出“图书不存在”异常 for(int i = 0; i < bookInfo.length; i++){ if(bookName.equals(bookInfo[i])){ System.out.println("book:"+bookInfo[i]); checkIfHave ++; } } if(checkIfHave < 1){ throw new Exception("图书不存在!"); } } //根据序号查找图书 public void searchAsNo(int bookNo , String[] bookInfo)throws Exception { // 如果输入的图书序号小于最小下标0 或 大于最大下标,即超出数组范围,则提示异常“此图书序号不存在”,否则输出序号对应图书名 if((bookNo < 0)||(bookNo > bookInfo.length )){ throw new Exception("此图书序号不存在!"); }else{ System.out.println("book:"+bookInfo[bookNo]); } } public static void main(String[] args) throws Exception { String[] bookInfo = new String[]{"高等数学","大学物理","大学英语","软件工程","线性代数"};//用字符串数组存储图书信息 RunThisProject rtp1 = new RunThisProject();//实例化RunThisProject类的对象,用于调用此类中的方法 Scanner input = new Scanner(System.in); boolean controler = true;//用于控制循环是否继续 while(controler){ System.out.println("请输入命令:1-按照名称查找图书 2-按照图书序号查找图书"); try{ int checkWay = 0; //存储用户的选择 checkWay = input.nextInt(); // 如果选择1-按照名称查找图书 if(checkWay == 1){ System.out.println("请输入您要查找的图书名称:");//提醒用户输入 String bookName;//存储用户输入的书名 bookName = input.next();//输入书名 rtp1.searchAsName(bookName, bookInfo);//调用searchAsName方法 } // 如果选择2-按照图书序号查找图书 if(checkWay == 2){ System.out.println("请输入您要查找的图书序号:");//提示用户输入图书序号 int bookNo = input.nextInt();//输入序号 rtp1.searchAsNo(bookNo, bookInfo);//调用searchAsNo方法 } controler = false;//若正常执行,无异常,则让controler借书,停止while循环 }catch(InputMismatchException e ){//捕获输入类型不符合的异常 System.out.println("命令输入错误,请根据提示输入数字命令!"); }catch(Exception e2){//捕获图书检测的异常,此图书不存在 或 此序号不存在 两种异常 System.out.println(e2.getMessage()); } } System.out.println("程序结束了!"); } }
附上可能的问题,求解决问题。
When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.