package com.imooc.exception_demo1; import java.util.Scanner; /**进入系统,查找图书主类(进入系统如果连续输错3次,则会提示是否重新进入系统, *若提示重新进入系统的命令还是连续输错三次,则强制退出程序,以上是自己想法在练习基础上增加了 *一些想法) */ public class PracticeOwn1_9 { String bookname[] = { "JAVA", "语文", "数学", "英语", "建筑设计" }; private static int count=0;//按照类型查找输入错误的统计数 private static int totle=0;//连续输错3次,统计重新进入系统输入错误数 public static void main(String[] args) { mainOperate(); } private static void mainOperate(){int a = 0;//给a一个初始化值 Scanner input = new Scanner(System.in); operate(a, input);//调用operate方法,把a传参 } private static void operate(int a, Scanner input) { FindName dy = new FindName(); FindNo dx = new FindNo(); System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书"); a=getA(a, input);//调用getA方法获取键盘输入的值赋值给a,用于判断下面if语句 // System.out.println("a:" + a);//打印当前a的值 if (a == 1) {//按照名称查找图书 dy.findName(dy, a, input); } else if (a == 2) {//按照序号查找图书 dx.findNO(dx, a, input); }else {setCount(getCount() + 1);//因为count定义的私有变量,访问需要get/set访问 if(getCount()>=3){ System.out.println("对不起,您已经连续输错3次及以上!!!0-继续进入系统查找,1-退出程序"); count=0;input1(); }else{ System.out.println("你输入的命令错误,请根据提示输入数字命令!!");//判断是否是非1和2的其他数字 ,若其他数字,输出该语句 } } operate(a, input); } public static void input1(){//判断是否继续进入系统查找,若输入命令错误,抛出错误异常 Scanner input = new Scanner(System.in); try{ int a=input.nextInt(); if(a == 0){ operate(a, input); }else if (a == 1) { System.out.println("退出程序,欢迎下次光临!"); System.exit(0); }else{ System.out.println("你输入的命令错误,暂时无法进入系统查找,请根据提示输入正确的命令!!");//判断输 入的是否是非1和2的其他数字,若其他数字,输出该语句 setTotle(getTotle() + 1); if(getTotle()>=3){ System.out.println("对不起,您已经连续输错3次!!!已退出程序,如有需要请重新进入系统。"); System.exit(0);} input1();} }catch(Exception e){ setTotle(getTotle() + 1); if(getTotle()>=3){ System.out.println("对不起,您已经连续输错3次及以上!!!已退出程序,如有需要请重新进入系统。"); System.exit(0); }else{ System.out.println("111你输入的命令错误,暂时无法进入系统查找,请根据提示输入数字命令!!");//为了 区别数字打印的和非数字打印的语句,文案前加了111} input1(); } } private static int getA(int a, Scanner input){ try {a = input.nextInt(); } catch (Exception e) {//筛选类别输入是否异常,判断是否是非数字抛出的异常setCount(getCount() + 1); if(getCount()>=3){ System.out.println("对不起,您已经连续输错3次及以上!!!0-继续进入系统查找,1-退出程序"); count=0;input1(); }else{ System.out.println("输入异常了!" + e.getMessage()); System.out.println("111你输入的命令错误,请根据提示输入数字命令!!");//为了区别数字打印的和非数字 打印的语句,文案前加了111 mainOperate(); } } return a; } public static int getCount() { return count; } public static void setCount(int count) { PracticeOwn1_9.count = count; } public static int getTotle() { return totle; } public static void setTotle(int totle) { PracticeOwn1_9.totle = totle; } } // 根据书名查找,新建一个类继承于父类(正常的按照视频给的模样,未自己添加其他判断) package com.imooc.exception_demo1; import java.util.InputMismatchException; import java.util.Scanner; public class FindName extends PracticeOwn1_9 { @SuppressWarnings("resource") public boolean findName(int order) { // TODO Auto-generated method stub boolean isExist = false; try { System.out.println("请输入图书名称:"); Scanner input = new Scanner(System.in); String b = input.next(); for (int i = 0; i < bookname.length; i++) { // System.out.println("b:" + b); if (bookname[i].equals(b)) { isExist = true; System.out.println("book:" + bookname[i]); break; } } if (!isExist) { throw new Exception("图书名称不存在!!1-继续查找,2-退出程序");//自定义异常抛出问题 } } catch (Exception e) { System.out.println(e); } //System.out.println("isExist:" + isExist);//打印isExist,判断返回状态 return isExist; } public void findName(FindName dy, int a, Scanner input) { boolean isTrue = findName(a); //System.out.println("isTrue:" + isTrue);//打印isTrue的状态,定位当前返回的值 if (isTrue) { findName(dy, a, input); } else { input(); findName(dy, a, input); } } public void input(){ Scanner input = new Scanner(System.in); try{ int a=input.nextInt(); if(a == 1){ FindName dy = new FindName(); findName(dy, a, input); }else if( a == 2){ System.out.println("退出程序,欢迎下次光临!"); System.exit(0); }else{//判断数字是否符合 System.out.println("输入的命令有误,请重新输入:1-继续查找,2-退出程序"); } input(); }catch(InputMismatchException e){//输入异常判断,如:英文字母、特殊字符 System.out.println("111输入的命令有误,请重新输入:1-继续查找,2-退出程序"); input(); } } } /** *按照序号查找图书,新建类继承于父类(该类设定了查询次数,错误查询和正确查询超过3次,即提示是否继 *续查询,以上是添加了自己的想法) */ public class FindNo extends PracticeOwn1_9 { int count1=0;//正确查找次数统计 int sum1=0;//错误查找次数统计 int totle=0;//继续查找次数统计 @SuppressWarnings("resource") public boolean findNO(int order) { // TODO Auto-generated method stubboolean isExist = false; System.out.println("请输入图书序号:"); try{Scanner input=new Scanner(System.in); int c=input.nextInt() - 1; System.out.println("book:"+bookname[c]); count1++;//若走正常查找,统计数+1 sum1=0;//只要正常查找一次,即错误统计数清零 isExist=true; }catch(ArrayIndexOutOfBoundsException e){//判断下标是否异常 //e.printStackTrace(); System.out.println("图书id不存在,请重新输入!"); count1=0;//只要错误查找一次,即正确查找统计数清零 sum1++;//若走错误查找,统计数+1(不管是哪种异常统计数都+1) }catch(InputMismatchException e){//判断输入是否为正整数 System.out.println("请输入正整数!!图书不存在,请重新输入!"); count1=0;//只要错误查找一次,即正确查找统计数清零 sum1++;//若走错误查找,统计数+1(不管是哪种异常统计数都+1) } //System.out.println("isExist:" + isExist);//打印返回状态 return isExist;//返回查找状态,false:没找到,true:已查找到 } public void findNO(FindNo dx, int a, Scanner input) { boolean isTrue = findNO(a);//判断是否查找到图书,false否,true是// System.out.println("isTrue:" + isTrue);//打印返回状态 if (isTrue) {//正常查找 if(count1>=3){ System.out.println("查找已经超过3次了,你还继续查找吗?1-是,2-否"); count1=0; totle=0; input(); } findNO(dx, a, input); } else { if(sum1>=3){ System.out.println("您已连续错了三次了,是否继续查找?1-是,2-否"); sum1=0; totle=0; input(); } findNO(dx, a, input); } input(); } public void input(){ Scanner input = new Scanner(System.in); try{int a=input.nextInt(); if(a == 1){ FindNo dx = new FindNo(); findNO(dx, a, input); }else if( a == 2){ System.out.println("退出程序,欢迎下次光临!"); System.exit(0); } else{ totle++; if(totle>=3){ System.out.println("1111您已连续错了三次了,是否继续查找?1-是,2-否"); input(); }else{ System.out.println("输入的命令有误,请重新输入:1-继续查找,2-退出程序"); } input(); } input(); }catch(InputMismatchException e){ totle++; if(totle>=3){ System.out.println("1111您已连续错了三次了,是否继续查找?1-是,2-否"); input(); }else{ System.out.println("输入的命令有误,请重新输入:1-继续查找,2-退出程序"); }input(); } } }
小测试一枚,学习JAVA中???,欢迎指导,谢谢
热门评论
写的很好啊