java第三季第一章:查找图书信息实现

294 查看

    我开始写的时候也是遇到了困难,看了一个人的笔记后我有了思路,以下是我自己写的代码,但是运行的时候有点奇怪,输入的字符必须在输出那段话的下一行点击开始输入,开始不再,所以输入可能会出问题,有人知道为什么开始输入的地方不在第二行吗?
/*
*创建一个自定义输出不存在异常
*
*/
public class nofoundexception extends Exception{
    //定义自定义异常形参构造函数
               public nofoundexception(String a){
         //把形参传递给超类构造函数
        super(a);
    }
      //定义无参构造函数
    public nofoundexception(){

    }

}
import java.util.InputMismatchException;
import java.util.Scanner;

public class jieshuxitong {
      //定义一个字符数组存放书本信息
    public static String[]bookname=new String[]{"武动乾坤","极品暧昧","斗破苍穹","神印王座","x龙时代","仙逆","龙族I火之晨曦","龙族II悼亡者之瞳","龙族III黑月之潮","龙族IV奥丁之渊"};
        //定义一个布尔型常量并赋初始值
    public static boolean flag=true;
        //创建一个判断并抛出自定义图书不存在异常方法
    public void test1(boolean flag) throws nofoundexception{
             //根据判断抛出异常
        if(flag=true){
        throw new nofoundexception("图书不存在异常");
        }
    }
       //根据书名查询图书类
    public void checkbookname() throws nofoundexception{
               //定义一个字符串数组存放输入字符串
        String name;
             //定义break跳出的循环范围
        start:
             //当抛出错误后循环输出提示语句
            while(true){
            try{
                                //创建java输入流
                Scanner input=new Scanner(System.in);
            System.out.println("请输入书名:");
            //保存输入信息并付给一个字符串
            name=input.nextLine();
                        /*在字符数组长度范围内循环判断输入字符串是否和字符数组中的成员一致
*/
            for(int a=0;a<bookname.length;a++){
                if(name.equals(bookname[a])){
                                      //匹配正确输出书名并改变flag值,跳出while循环
                    System.out.println("book:"+name);
                    flag=false;
                    break start;
                }

        }
                          //判断并抛出异常
            test1(flag);
        }catch(InputMismatchException e){
            System.out.println("命令输入错误!请根据提示输入数字命令");
        }catch(nofoundexception e){
            System.out.println("图书不存在");
        }
            }
    }
      //根据序号查询图书
    public void checkbooknumber()throws nofoundexception{
        int number;
                 //定义跳出循环范围
        start:
                     //当输入错误时循环输出
            while(true){
        try{
                    Scanner input1=new Scanner(System.in);
                    System.out.println("输入图书序号:");

                    number=input1.nextInt();
                                            //判断输入数字是否超出数组长度
                    if(number>0&&number<bookname.length){
                        System.out.println("book:"+bookname[number-1]);
                                          //当找到图书时改变flag值跳出循环
                        flag=false;
                        break start;
                    }else{
                                         //根据flag值判断并抛出异常
                        test1(flag);
                    }

        }catch(InputMismatchException e){
            System.out.println("命令输入错误!请根据提示输入数字命令");
        }catch(nofoundexception e){
            System.out.println("图书不存在");
        }
            }
    }
    public static void main(String[]args){
        start:
                      //根据flag的值判断是否结束循环
            while(flag){
            try{
            jieshuxitong s=new jieshuxitong();

                int b=0;
                Scanner input2=new Scanner(System.in);
            System.out.println("输入命令查找图书:1-按书名,2-按序号");

            b=input2.nextInt();
            switch(b){
            case 1:

                s.checkbookname();
                break start;
            case 2:
                s.checkbooknumber();
                break start;
                default:
                    System.out.println("命令输入错误!请根据提示输入数字命令");

            }

        }catch(InputMismatchException e){
            System.out.println("命令输入错误!请根据提示输入数字命令");
        }catch(nofoundexception e){
            System.out.println("图书不存在");
        }
        }

    }

}