继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java入门第三季——简易图书管理系统

加油啊豪
关注TA
已关注
手记 3
粉丝 25
获赞 247

小白看过来~~将控制台输入整形命令、按书名查找图书、按序号查找图书写成三个方法,运用whlie(true)循环在错误命令后继续执行同一段代码,再利用switch()语句是main方法简洁易懂。该代码是对老师的代码进行深度分析,注释非常详尽,有什么不懂的尽管提问,知无不言,言无不尽,欢迎批评指教,共同进步。
图片描述

main方法:

package com.imooc;
import java.util.Scanner;

public class Test_bookManager {
    private static Scanner console=new Scanner(System.in);
    /*
     * 1.定义字符串数组保存图书信息
     * 2.提示用户输入,分别按“书名”和“图书序号”查找图书
     * 3.根据输入信息进行适当的异常处理
     *   a.如果输入类型错误,抛出“错误命令异常”,并提示重新输入;
     *   b.如果书名不存在,抛出“图书不存在异常”,并提示重新输入;
     *   c.如果图书序号超过字符串数组范围,抛出“图书不存在”异常,并提示重新输入。
     */
    public static void main(String[] args){
        // TODO Auto-generated method stub
        //定义String型数组books,用来保存图书信息
        String[] books={"高数","数据结构","java入门","Thinking in Java","JavaScript"};

        while(true){//当输入了错误的选择命令时,能够再次执行
            String book;
            System.out.println("请输入数字命令:1-按书名查找图书;2-按序号查找图书");
            try{
                int command=inputCommand();
                switch(command){
                case 1://按书名查找图书
                    book=getBookByName(books);
                    System.out.println("已为您查找到匹配图书:"+book);
                    break;//这个break只退出switch语句
                case 2://按序号查找图书
                    book=getBookByNum(books);
                    System.out.println("已为您查找到匹配图书:"+book);
                    break;
                case -1://说明没有输入整数
                    System.out.println("命令输入错误,请输入数字命令!");
                    continue;//直接开始执行一下次循环
                default://输入其余的所有值,都是输入错误
                    System.out.println("命令输入错误!");
                    continue;   
                }
                break;//退出程序
            }catch(Exception e){//当上面方法抛出图书不存在异常时,在这里捕获,提示“图书不存在!”。并再次执行while()循环。
                System.out.println(e.getMessage());
                continue;
            }

        }
    }

接受控制台输入的整形命令方法:

//用于接收控制台的输入命令,如输入选择命令和输入序号命令
    private static int inputCommand(){
        try{
            int command=console.nextInt();
            return command; 
        }catch(Exception e){//若输入的不是整数,则抛出异常,捕获异常,返回-1
            console=new Scanner(System.in);//如果没有对console的重新实例化,则main函数会陷入死循环!(在while()循环和case -1两者之间陷入死循环!!)
            return -1;//在main函数中提示“命令输入错误,请输入数字命令!”
        }
    }

按序号查找图书:

//按序号查找图书
    private static String getBookByNum(String[] books) throws Exception{//先声明会抛出异常
        while(true){
            System.out.println("请输入需查找书籍的序号:");
            try{
                int index=inputCommand();//图书序号
                if(index==(-1)){//若返回值为-1,则表明输入的命令不是整数,那么提示"命令输入错误,请输入数字命令!",并再次执行while()循环
                    System.out.println("命令输入错误,请输入数字命令!");
                    continue;
                }
                //如果输入的整数没有超过books数组的界限,则返回在数组中相应位置的图书
                String book=books[index-1];
                return book;
            }catch(ArrayIndexOutOfBoundsException e){//ArrayIndexOutOfBoundsException为数组下标越界异常
                //若输入的整数超过了books数组的界限,则抛出“图书不存在异常”
                Exception bookNotExist=new Exception("图书不存在!");//定义一个异常bookNotExist,并调用Exception的含参构造方法
                bookNotExist.initCause(e);//表明bookNotExist异常由e(数组下标越界异常)引起
                throw bookNotExist;//抛出该异常
            }

        }

    }

按书名查找图书:

//按书名查找图书
    private static String getBookByName(String[] books) throws Exception{//先声明会抛出异常
        System.out.println("请输入需查找的书籍的名称:");
            String name=console.next();//接收输入的 字符串
            for(int i=0;i<books.length;i++){
                if(books[i].equals(name)){//对books数组进行遍历,找到相匹配的books元素
                    return books[i];
                }
            }
            //如果没有相匹配的books元素,则抛出“图书不存在异常”
            throw new Exception("图书不存在!"); 

    }
打开App,阅读手记
30人推荐
发表评论
随时随地看视频慕课网APP

热门评论

还是感觉好难啊  别说写了   看懂都很吃力···············

能看懂但是自己写不出来,

try......catch 、Exception  ,这些我都明白,但是不知道怎么用,在哪里用


这个程序好像有个小bug:

http://img.mukewang.com/58f35f7b000142fc07240196.jpg

输入图书序列号为-1,提示我输入数字命令!!

查看全部评论