/*要求:
- 1、定义字符串数组保存图书信息
- 2、提示用户输入,分别按“书名”和“图书序号”查找图书
- 3、根据输入信息进行适当的异常处理
- a、如果输入类型错误,抛出“错误命令异常”,并提示重新输入
- b、如果书名不存在,抛出“图书不存在异常”,并提示重新输入
- c、如果图书序号超出字符串数组范围,抛出“图书不存在异常”,并提示重新输入
- */
package com.duing;
import java.util.InputMismatchException;
import java.util.Scanner;
public class BookManage {
//创建键盘录入对象
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
//字符串数组存放图书信息
String[] books = {"Oracle 10g","Java","Java从入门到放弃","JavaScript","ASP.NET","C#程序设计"};
while(true){
String book;
System.out.println("*******请选择查询方式:");
System.out.println("1:按书名查找" + "\t" + "2:按图书序号查找");
try{
int select = inputCommand();
switch(select){
case 1://按书名查找
book = getBookByName(books);
System.out.println("您要找的书:" + book);
break;
case 2://按图书序号查找
book = getBookByNum(books);
System.out.println("您要找的书:" + book);
break;
case -1://其他类型输入
System.out.println("----错误命令,请重新输入!");
continue;
default://其他数组输入
System.out.println("无此命令!");
continue;
}
}
catch (Exception e) {
System.out.println(e.getMessage());
continue;
}
}
}
/*对键盘录入的数据进行异常处理
* */
public static int inputCommand() {
try {
int command = sc.nextInt();
return command;
}
//对输入类型进行匹配
catch (InputMismatchException e) {
//将sc重新实例化,否则系统在while()与case -1间死循环
sc = new Scanner(System.in);
return -1;
}
}
//按书名找书
public static String getBookByName(String[] books) throws Exception{
System.out.println("******请输入要查找书籍的书名:");
String bookname = sc.next();
for(int i=0; i<books.length; i++){
if(books[i].equals(bookname)){
return books[i];
}
}
throw new Exception("图书不存在!");
}
/* 通过图书序号查找
* 首先,看输入类型是否合法"输入不合法,请重新输入"
* 在看数组是否越界
* 越界就抛出异常"该图书不存在"
* */
public static String getBookByNum(String[] books) throws Exception {
while(true){
System.out.println("******请输入要查找书籍的序号:");
try {
//传入键盘录入的图书序号
int booknum = inputCommand();
if(booknum == -1){
//若返回值为-1,则表示键盘录入数据不合法
System.out.println("----错误命令,请重新输入!");
continue;
}
//键盘录入所选为:第n本图书,与数组中对应 则 -1
String book = books[booknum-1];
return book;
}
//数组下标越界异常
catch (ArrayIndexOutOfBoundsException e) {
//自定义图书不存在异常
Exception noBookException = new Exception("图书不存在!");
//表明异常noBookException,是由e引起的
noBookException.initCause(e);
throw noBookException;//抛出该异常
}
}
}
}