借书系统异常处理

  1. import java.util.Scanner;  
  2.   
  3. public class Test {  
  4.     private static Scanner console = new Scanner(System.in);  
  5.   
  6.     public static void main(String[] args) {  
  7.         //定义”图书“数组  
  8.         String[] books = { "C语言""数据结构""汇编语言""高数""大学语文""毛概" };  
  9.         while (true) {  
  10.             System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");  
  11.             String book;  
  12.             try {  
  13.                 //取得整型命令  
  14.                 int command = inputCommand();  
  15.                 //根据不同命令值,进行不同操作  
  16.                 switch (command) {  
  17.                 case 1://按照图书名称选择图书  
  18.                     book = getBookByName(books);  
  19.                     System.out.println("book:" + book);  
  20.                     break;  
  21.                 case 2://按照图书序号(数组下标)选择图书  
  22.                     book = getBookByNumber(books);  
  23.                     System.out.println("book:" + book);  
  24.                     break;  
  25.                 case -1://返回值为-1,说明输入有误  
  26.                     System.out.println("命令输入错误!请根据提示输入数字命令!");  
  27.                     continue;  
  28.                 default://其他值的命令均认为是错误命令  
  29.                     System.out.println("命令输入错误!");  
  30.                     continue;  
  31.                 }  
  32.                 break;//退出程序  
  33.             } catch (Exception bne) {  
  34.                 //捕获”图书不存在异常“时,要求重新输入命令  
  35.                 System.out.println(bne.getMessage());  
  36.                 continue;  
  37.             }   
  38.         }  
  39.     }  
  40.   
  41.     //按照图书名称查询图书  
  42.     private static String getBookByName(String[] books)  
  43.             throws Exception {  
  44.         System.out.println("输入图书名称:");  
  45.         //获取输入的图书名称  
  46.         String name = console.next();  
  47.         for (int i = 0; i < books.length; i++) {  
  48.             if (name.equals(books[i]))  
  49.                 //输入的名称与某一图书名称匹配,返回该图书  
  50.                 return books[i];  
  51.         }  
  52.         //若无匹配,抛出”图书不存在异常“  
  53.         throw new Exception("图书不存在!");  
  54.     }  
  55.   
  56.     //根据图书序号(数组下标)查询图书  
  57.     private static String getBookByNumber(String[] books)  
  58.             throws Exception {  
  59.         while (true) {  
  60.             System.out.println("输入图书序号:");  
  61.             try {  
  62.                 //获取输入的图书序号(数组下标)  
  63.                 int index = inputCommand();  
  64.                 //若返回值为-1  
  65.                 if(index == -1){  
  66.                     System.out.println("命令输入错误!请根据提示输入数字命令!");  
  67.                     continue;  
  68.                 }  
  69.                 //若不出现”数组下标越界异常“,则返回相应位置的图书  
  70.                 String book = books[index];  
  71.                 return book;  
  72.             } catch (ArrayIndexOutOfBoundsException e) {  
  73.                 //输入的序号不存在(引发”数组下标越界异常“),则抛出”图书不存在异常“  
  74.                 Exception bookNotExists = new Exception("图书不存在!");  
  75.                 bookNotExists.initCause(e);  
  76.                 throw bookNotExists;  
  77.             }  
  78.         }  
  79.     }  
  80.   
  81.     //从控制台输入命令,用于输入命令和输入图书序号  
  82.     private static int inputCommand(){  
  83.         int command;  
  84.         try {  
  85.             command = console.nextInt();  
  86.             return command;  
  87.         } catch (Exception e) {  
  88.             //若输入字符型或者字符串,则抛出异常,捕获该异常,抛出”错误命令异常“  
  89.             console = new Scanner(System.in);  
  90.             //返回-1  
  91.             return -1;  
  92.         }  
  93.     }  
  94. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章