程序流程图我就不放上来了,慕友们将就着看看吧,注释还算清晰。
这段代码是Java入门第三季异常与异常处理这一章的练习题,
代码尚有不足,请多多指教。
/**
* 功能:模拟借书系统
* 要求:
* 1.定义字符串数组保存图书信息
* 2.提示用户输入,分别按“书名”和“图书序号”查找图书
* 3.根据输入信息进行适当的异常处理:
* a) 如果输入类型错误,抛出“错误命令异常”,并提示重新输入
* b) 如果书名不存在,抛出“图书不存在异常”,并提示重新输入
* c) 如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
* @author zodas
*
*/
先看BorrowBook类
import java.util.Scanner;
public class BorrowBook{
static String[] books={"数据结构","高数","Java","Html"};//保存图书信息
static int flagCommand=0;//查询命令错误标志
static int flagNotexistName=0;//图书名称不存在标志
static int flagNotexistNum=0;//图书序号不存在标志
static BorrowBook bk=new BorrowBook();
static Scanner input=new Scanner(System.in);
/******************************main方法*********************************/
public static void main(String[] args) {
int num;//用于保存图书的序号
String name;//用于保存图书的名称
System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");//提示用户输入
String way=input.next();
bk.choseWay(way);//选择查询方式
while(true){
if(flagCommand==0){//查询命令错误,则提示用户重新输入查询方式
way=input.next();
bk.choseWay(way);
continue;
}
if(flagCommand==1){//按图书名称查询
System.out.println("输入图书名称:");
name=input.next();
bk.ckName(name);
if(flagNotexistName==1){//如果图书不存在,则抛出图书不存在异常
NobookException nbe=new NobookException();
try{
nbe.noBook();
}catch(NobookException ne){
System.out.println(ne.getMessage());
}
System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
way=input.next();
bk.choseWay(way);
continue;
}else{//图书已查到,询问用户是否要继续查询
System.out.println("是否要继续查询?1-是; 2-否");
if(input.nextInt()==1){//若要继续查询,则提示用户查询步骤
System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
way=input.next();
bk.choseWay(way);
continue;
}else
break;//若不继续查询,则终止系统
}
}
if(flagCommand==2){//按图书序号查询
System.out.println("输入图书序号:");
num=input.nextInt();
bk.ckNum(num);
if(flagNotexistNum==1){//如果图书不存在,则抛出图书不存在异常
NobookException nbe=new NobookException();
try{
nbe.noBook();
}catch(NobookException ne){
System.out.println(ne.getMessage());
}
System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
way=input.next();
bk.choseWay(way);
continue;
}else{//图书已查到,询问用户是否要继续查询
System.out.println("是否要继续查询?1-是; 2-否");
if(input.nextInt()==1){//若要继续查询,则提示用户查询步骤
System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
way=input.next();
bk.choseWay(way);
continue;
}else
break;//若不继续查询,则终止系统
}
}
}
}
/*************选择查询方式,1按图书名称查询,2按序号查询,其它则抛出命令异常***********/
public void choseWay(String n){
if(n.equals("1")){
flagCommand=1;//按图书名称查询,则置查询命令标志位为1
}
else if(n.equals("2")){
flagCommand=2;//按图书序号查询,则置查询命令标志位为2
}else{
WrongCommandException wce=new WrongCommandException();
try{
wce.wrongCommand();
}catch(WrongCommandException wc){
System.out.println(wc.getMessage());
}
System.out.println("输入命令:1-按照书名查找图书; 2-按照序号查找图书");
flagCommand=0;//查询命令错位,则置查询命令标志位为0
}
}
/**********************检查此名称的书是否存在,存在则返回0,不存在则返回1***************/
public int ckName(String name){
for(int i=0;i<books.length;i++){
if(name.equals(books[i])){
System.out.println("book:"+books[i]+" 这本书是有的");
flagNotexistName=0;//图书名称存在,则置图书名称存在标志位为0
break;//一旦查到此图书名称则跳出for循环
}
else
flagNotexistName=1;//图书名称存在,则置图书名称存在标志位为1
}
return flagNotexistName;//返回图书名称标志位的值
}
/*******************检查此序号的书是否存在,存在则返回0,不存在则返回1******************/
public int ckNum(int num){
if(0<=num&&num<books.length){
System.out.println("book:"+books[num]+" 这本书是有的");
flagNotexistNum=0;//图书序号存在,则置图书序号存在标志位为0
}
else
flagNotexistNum=1;//图书序号存在,则置图书序号存在标志位为1
return flagNotexistNum;//返回图书序号标志位的值
}
}
自定义异常--NobookException类
public class NobookException extends Exception {
/**
* 图书不存在异常
*/
private static final long serialVersionUID = 1L;//这行我也不知道什么意思,编译器自动生成的
public void noBook() throws NobookException{
throw new NobookException("图书不存在!");
}
public NobookException(){
}
public NobookException(String message){
super(message);
}
}
自定义异常--WrongCommandException类
public class WrongCommandException extends Exception {
/**
* 命令错误异常
*/
private static final long serialVersionUID = 1L;//这行我也不知道什么意思,编译器自动生成的
public void wrongCommand() throws WrongCommandException{
throw new WrongCommandException("命令输入错误!请根据提示输入数字命令!");
}
public WrongCommandException(){
}
public WrongCommandException(String message){
super(message);
}
}
热门评论
谈谈我写这段代码时遇到的几个问题吧。
关于自定义异常
代码中虽然实现了异常的抛出,但我觉得还是欠点意思。
因为我是依葫芦画瓢写的自定义异常类,虽然抛出的异常,但感觉跟直接System.out.println()没什么区别,
没有真正的体现自定义异常类的功能。
看来还是得需要,再研究研究异常类的相关知识。
关于Scanner类
这段代码如果放在main()方法里,是会出问题的,
必须得放在main()方法之前,
这应该是涉及到静态内部类和局部内部类的相关知识吧,有待进一步巩固和思考
道理我都懂 帮忙写个论文多少钱