模拟借书系统练习(java)

首先自定义了两个异常类:

package lu.zhang;
//定义新异常,数字错误异常 NumException,也就是系统最初需要通过1、2选择找书方式时输入了3或4等其他数字的情况
public class NumException extends Exception {
    public NumException(){

    };

    public NumException(String message){
        super(message);
    };
}
package lu.zhang;
//定义新异常,书名不存在异常 NoBookException 
public class NoBookException extends Exception {
    public NoBookException(){

    };

    public NoBookException(String message){
        super(message);
    };
}
package lu.zhang;

import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String[] book=new String[]{"海尔兄弟","熊出没","葫芦娃","西游记","哪吒传奇","数码宝贝","神奇宝贝","小黄书","小小黄书","科科","哈哈","嘿嘿","编不下去了","再见"};
        int choice;
        Scanner input=new Scanner(System.in);
        for(;;){
            for(;;){
                try{
                    input=new Scanner(System.in);//System.in会一直等待输入,防止在没有输入的状态下一直循环
                    System.out.println("欢迎借书!");
                    System.out.println("请输入命令:1-按照名字查书;2-按照序号查书");
                    choice=input.nextInt();
                    if (choice!=1&&choice!=2)
                        throw new NumException("数字不匹配");
                    else
                        break;
                }
                catch(InputMismatchException e)
                {
                    System.out.println("[请按提示输入命令]");
                }
                catch(NumException e1)
                {
                    System.out.println("[请按提示输入数字]");
                }
            }
            if(choice==1){
                input=new Scanner(System.in);
                System.out.println("请输入图书名称:");
                try{
                    String str=input.next();
                    boolean flagOfExist=false;
                    for(int i=0;i<book.length;i++){
                        if(book[i].equals(str)) {
                            flagOfExist=true;
                            break;
                        }
                    }//如果存在书库中存在一本书与输入名称相同,则可跳出循环
                    if(!flagOfExist) //
                        throw new NoBookException("图书不存在!");
                    else 
                        System.out.println("找到book:"+str);

                }
                catch(NoBookException e)
                {
                    System.out.println("图书不存在!");

                    continue;
                }
            }
            if(choice==2){
                input=new Scanner(System.in);
                System.out.println("请输入图书序号:");
                try{
                    int num=input.nextInt();
                    String str=book[num-1];
                    System.out.println("找到book:"+str);  
                }
                catch(ArrayIndexOutOfBoundsException e)
                {
                    System.out.println("图书不存在!");

                    continue;
                }
            }

        }
    }

}

控制台程序执行:
欢迎借书!
请输入命令:1-按照名字查书;2-按照序号查书
kkk
[请按提示输入命令]
欢迎借书!
请输入命令:1-按照名字查书;2-按照序号查书
6
[请按提示输入数字]
欢迎借书!
请输入命令:1-按照名字查书;2-按照序号查书
1
请输入图书名称:
小小黄书
找到book:小小黄书
欢迎借书!
请输入命令:1-按照名字查书;2-按照序号查书
1
请输入图书名称:
法尔
图书不存在!
欢迎借书!
请输入命令:1-按照名字查书;2-按照序号查书
2
请输入图书序号:
233333
图书不存在!
欢迎借书!
请输入命令:1-按照名字查书;2-按照序号查书
2
请输入图书序号:
7
找到book:神奇宝贝
欢迎借书!
请输入命令:1-按照名字查书;2-按照序号查书

说实话,在这里用了for(;;)循环让我感觉很难受,可是去看了看其他慕友的程序,也都是用循环。小白想请教一下,是否在这一编程情境下,for(;;)这种无条件的循环是避免不了的,有没有其他方式解决?(奇怪的问题。。。)

点赞