为了账号安全,请及时绑定邮箱和手机立即绑定

交作业啦,备注了知识点总结

package com.study2;
import java.util.Scanner;
//异常处理
//所有异常类都继承于Throwable
//两大类,Exception类和Error类
//Error: VirtualMachineError,ThreadDeath,虚拟机错误,线程锁死
//Exception:非检查异常RuntimeException(运行时异常)
//检查异常:IOException,SQLException
////RuntimeException:
//空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)
//类型转换异常(ClassCastException),算术异常(ArithmeticException)
//InputMismatchException输入不匹配异常
//ArithmeticException算术异常
//Exception类中的printStackTrace();堆栈跟踪信息
//InitCause方法,追溯异常的原因,对异常进行包装
//自定义异常
//nextLine可以读到空格,next不行,两者遇见回车结束
public class Initail {
    public static void main(String[] args) {
        choose();
    }

    //书架
    private static Scanner input = new Scanner(System.in);
    private static Book[] books = new Book[]{
            new Book("龙族", "001"),
            new Book("三体", "002"),
            new Book("毛选", "003"),
    };

    //选书
    private static void choose() {
        System.out.println("输入命令:1 按照书名查找图书  2 按照ISBN号查找图书");
        try {
            int choice = input.nextInt();
            if (choice == 1) SearchByName();
            if (choice == 2) SearchByNumber();
            else{
                System.out.println("输入错误,请重新输入");
                choose();
            }
        } catch (NameException e) {
            e.printStackTrace();
            choose();
        }catch (NumberException e){
            e.printStackTrace();
            choose();
        }catch (Exception e){
            System.out.println("输入命令有误");
            choose();
        }
    }

    //按照书名选书
    private static void SearchByName() throws NameException {//抛出声明
        System.out.println("输入要查找的书籍名称:");
        String inputname="0";
        try {
            inputname = input.next();
        } catch (Exception e) {//异常时的处理
            System.out.println("输入不合法");
            SearchByName();//重新进入该方法
        }
        boolean check = false;
        //检查输入是否合法
        //equals函数:字符串比较,若相等则返回true,否则返回false
        for (int i = 0; i < books.length; i++) {
            if (books[i].getBookname().equals(inputname)) {
                System.out.println("书籍名称:" + inputname + "   " + "ISBN:" + books[i].getISBN());
                check = true;
            }
        }
        if (check == false) throw new NameException();

    }

    //按照IBSN号选书
    private static void SearchByNumber() throws NumberException {//抛出声明
        String inputnumber ="0";
        System.out.println("输入要查找的书籍ISBN:");
        try {
            inputnumber = input.next();
        } catch (Exception e) {//异常时的处理
            System.out.println("输入不合法");
            SearchByNumber();
        }
        boolean check = false;
        //检查输入是否合法
        for (int i = 0; i < books.length; i++) {
            if (books[i].getISBN().equals(inputnumber)) {
                System.out.println("书籍名称:" + books[i].getBookname() + "   " + "ISBN:" + inputnumber);
                check = true;
            }
        }
        if (check == false) throw new NumberException();
    }
}
//自定义异常
package com.study2;

public class NameException extends Exception {
    //构造方法
    NameException(){
        super("该图书不存在!");
    }
}
package com.study2;

public class NumberException extends Exception {
    NumberException(){
        super("该图书不存在!");
    }
}
package com.study2;

public class Book {
    private String bookname;
    private String ISBN;// International Standard Book Number

    public String getBookname() {
        return bookname;
    }

    public void setBookname(String bookname) {
        this.bookname = bookname;
    }

    public String getISBN() {
        return ISBN;
    }

    public void setISBN(String ISBN) {
        this.ISBN = ISBN;
    }

    //有参的构造函数
    public Book(String bookname,String ISBN){
        this.bookname=bookname;
        this.ISBN=ISBN;
    }

}


正在回答

5 回答

阔以的,很强,也不知道要回答什么,方法封装的很好,可以改成public去使用

1 回复 有任何疑惑可以回复我~
#1

远赴山河万里 提问者

养成好习惯啦,都封装好
2020-03-20 回复 有任何疑惑可以回复我~

书架那一栏创建得是对象数组吗?  为什么我复制到编辑器全报错i

0 回复 有任何疑惑可以回复我~
#1

远赴山河万里 提问者

你这样复制肯定报错啊,我们包名都不一样.....
2020-04-03 回复 有任何疑惑可以回复我~

问下,为什么我打出来不存在的书名,不会输出  该图书不存在  看着你的代码打的

1 回复 有任何疑惑可以回复我~
#1

远赴山河万里 提问者

//这里应该改为,我之前写掉了个else,else与if是就近配对的,至于你说的问题我运行了一下并没有出现。 if (choice == 1) SearchByName(); else if (choice == 2) SearchByNumber(); else{ System.out.println("输入错误,请重新输入"); choose();
2020-03-26 回复 有任何疑惑可以回复我~
#2

慕仰9388805 回复 远赴山河万里 提问者

好的 谢谢,写的很棒!
2020-03-27 回复 有任何疑惑可以回复我~

厉害,受教了?

0 回复 有任何疑惑可以回复我~

看你写的代码真的非常好。我是初学者,想请教一个类似这样代码的问题。第一步程序要输入一个规定的数字,但是输入字母的话就会抛出异常,我想让它能够返回方法并重新输入,但是按照这个方式写,结果是不停地返回该方法的输出部分,没有再重新输入的机会。我的理解是输入这个字母后,程序会返回到方法中,但是这个输入值依然是这个字母,就无限循环报错了,不知道我想的对不对,请问这个怎么解决呢

0 回复 有任何疑惑可以回复我~
#1

远赴山河万里 提问者

catch (Exception e){ System.out.println("输入命令有误"); input =new Scanner(System.in); choose();
2020-03-24 回复 有任何疑惑可以回复我~
#2

远赴山河万里 提问者

感谢指正,这是因为java和C一样都有缓冲区的存在,所以解决办法是,重新new一个输入对象,这样就间接的清空的缓冲区。
2020-03-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

交作业啦,备注了知识点总结

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信