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; } }
阔以的,很强,也不知道要回答什么,方法封装的很好,可以改成public去使用
书架那一栏创建得是对象数组吗? 为什么我复制到编辑器全报错i
问下,为什么我打出来不存在的书名,不会输出 该图书不存在 看着你的代码打的
厉害,受教了?
看你写的代码真的非常好。我是初学者,想请教一个类似这样代码的问题。第一步程序要输入一个规定的数字,但是输入字母的话就会抛出异常,我想让它能够返回方法并重新输入,但是按照这个方式写,结果是不停地返回该方法的输出部分,没有再重新输入的机会。我的理解是输入这个字母后,程序会返回到方法中,但是这个输入值依然是这个字母,就无限循环报错了,不知道我想的对不对,请问这个怎么解决呢