手记

Java入门第三季 1-9 异常总结

/*要求:

  • 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;//抛出该异常
        }           
    }       
}

}

1人推荐
随时随地看视频
慕课网APP