l_yanlei
2016-02-14 21:45
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.
把Scanner input=new Scanner(System.in)塞到try的肚子里面去
已解决。
Java入门第三季
409775 学习 · 4546 问题
相似问题