小白看过来~~将控制台输入整形命令、按书名查找图书、按序号查找图书写成三个方法,运用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("图书不存在!");
}
热门评论
还是感觉好难啊 别说写了 看懂都很吃力···············
能看懂但是自己写不出来,
try......catch 、Exception ,这些我都明白,但是不知道怎么用,在哪里用
这个程序好像有个小bug:
输入图书序列号为-1,提示我输入数字命令!!