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

作业疑问:

要是我要把如下输出:
输入命令:1-按照名称查找图书;2-按照序号查找图书
2
输入图书序号:
0003
图书不存在!
输入命令:1-按照名称查找图书;2-按照序号查找图书
2
输入图书序号:
0002
book:高数

变为:
输入命令:1-按照名称查找图书;2-按照序号查找图书
2
输入图书序号:
0003
图书不存在!
输入图书序号:
0002
book:高数

代码应该怎么改?

public class BookSearch {
 BookDAO bDAO[] = {new BookDAO("0001", "语文"), new BookDAO("0002", "高数")};
 boolean flagNoFould = true;
 
 public void searchBook() throws TypeException,NoBookException{
  while(flagNoFould){  
   try{
    System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");
    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();
    searchModel(input);
  
    if(input == 1){
     System.out.println("输入图书名称:");
     String name = scan.next();
     searchByName(name);
    }
    if(input == 2){
     System.out.println("输入图书序号:");
     String bookID = scan.next();
     searchByID(bookID);
    }    
   }catch(TypeException e){
    this.searchBook();
   }catch(NoBookException e){
    continue;
   }
  }  
 }
 
 private void searchModel(int model) throws TypeException {
  try{
   if(!(model== 1 || model ==2)){
    throw new TypeException("命令输入错误!请根据提示输入数字命令!");
   }
  }catch(TypeException e){
   System.out.println(e.getMessage());
  }
 }
 
 private void searchByName(String name) throws NoBookException {
  try{
   for(int i = 0; i < bDAO.length; i++){
    if(name.equals(bDAO[i].getName())){
     System.out.println("book:" + bDAO[i].getName()); 
     flagNoFould = false;
     break;
    }
   }
   if(flagNoFould){
    throw new NoBookException("图书不存在!");
   }
  }catch(NoBookException e){
   System.out.println(e.getMessage());
  }   
 }
 
 private void searchByID(String bookID) throws NoBookException {
  try{
   for(int i = 0; i < bDAO.length; i++){
    if(bookID.equals(bDAO[i].getBookID())){
     System.out.println("book:" + bDAO[i].getName()); 
     flagNoFould = false;
     break;
    }
   }
   if(flagNoFould){
    throw new NoBookException("图书不存在!");
   } 
  }catch(NoBookException e){
   System.out.println(e.getMessage());
  } 
 }
 
}

正在回答

2 回答

抛出异常  ?   "图书不存在" 不是你 if 语句那里判断输出的吗 , 不是 catch 的异常 ,  你输出 图书不存在 后 没把 flagNoFould 改成 false , 你原来 的 flagNoFould 定义的是 true ,  所一 while 就重新执行了 

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

时光醉了流年 提问者

我的异常链写错了〒_〒
2015-01-28 回复 有任何疑惑可以回复我~
#2

_Exception 回复 时光醉了流年 提问者

>A<
2015-01-28 回复 有任何疑惑可以回复我~

就是在书不存在的时候不返回到原来那步 , 直接继续输入 , 

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

时光醉了流年 提问者

才发现当抛出异常后是重新执行while语句,根本就没执行catch,为什么会这样?
2015-01-28 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

作业疑问:

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