参考了其他同学的手记,自己折腾了好久时间终于也写出来了,请多多指教!
package books;
import java.util.Scanner;
public class BorrowBooksSystem2 {
private static String[] bk = {"数学","语文","计算机","政治","历史"};
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws Exception {
PrintBooks();// 打印可借书籍的名称和序号列表
while(true){// 循环搜索功能,直到搜索到正确的书籍
try{
String book;// 定义一个用于接收书籍名称的变量
System.out.println("输入1-通过序号选择书籍,输入2-通过书名选择书籍:");
int s = SelectMode();// 定义一个用于接收选择搜索模式的变量
switch(s){
case 1:
book = GetByBooksNum();
System.out.println("您选择的书籍是:" + book);
break;//跳出switch语句
case 2:
book = GetByBooksName();
System.out.println("您选择的书籍是:" + book);
break;
case -1:// 除了1或2,其他的整数均为错误
System.out.println("请确认输入的整数为1或2。");
continue;// 进入下一次循环
}
}catch(Exception e){// 打印捕获到的异常信息
System.out.println("发现异常:" + e.getMessage());
continue;
}
break;//跳出while语句
}
}
private static void PrintBooks(){// 用于打印书籍可借书籍的列表
System.out.println("欢迎使用借书系统,以下是书籍列表:");
System.out.println("序号:\t书名:");
for(int i = 1;i <= bk.length;i++){
System.out.println(i + ".\t" + bk[i-1]);
}
}
private static int SelectMode() throws Exception{// 声明抛出的异常
try{
int se = sc.nextInt();
if(se == 1 || se == 2){
return se;
}else{
return -1;
}
}catch(Exception e){// 用initCause包装异常并抛出
Exception ex = new Exception("SelectMode输入的不是整数!");
ex.initCause(e);
sc = new Scanner(System.in);//如果没有对sc的重新实例化,则main函数会陷入死循环!
throw ex;
}
}
private static String GetByBooksName() throws Exception{
System.out.println("输入您要搜索书籍的名称:");
String name = sc.next();
for(int i = 0;i < bk.length;i++){
if(bk[i].equals(name)){// 遍历对比输入的图书名字是否在bk数组里
return name;
}
}
throw new Exception("输入的图书名称不存在!");
}
private static String GetByBooksNum() throws Exception{
System.out.println("输入您要搜索书籍的序号:");
try{
int num = sc.nextInt();
return bk[num-1];
}catch(ArrayIndexOutOfBoundsException e){// 数组下标越界异常,打包并抛出
ArrayIndexOutOfBoundsException arr = new ArrayIndexOutOfBoundsException("输入的图书序号不存在!");
arr.initCause(e);
throw arr;
}catch(Exception e){
Exception ex = new Exception("BooksNum输入的不是整数!");// 传值错误异常,打包并抛出
ex.initCause(e);
sc = new Scanner(System.in);//如果没有对sc的重新实例化,则main函数会陷入死循环!
throw ex;
}
}
}