超神crazy
2017-07-09 09:40
package com.Zyc;
import java.util.InputMismatchException;
import java.util.Scanner;
public class book {
public static void main(String[] args) throws InputMismatchException {
String[] books={"数据结构","操作系统","JAVA","算法","LINUX","WEB前端"};
Scanner input=new Scanner(System.in);
String z = null;
while(z==null){
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书");
try {
int a=input.nextInt();
if (a==1) {
System.out.println("输入图书名称:");
String b=input.next();
for(int i=0;i<books.length;i++){
if (b.equals(books[i])) {
z="book:"+books[i];
System.out.println(z);
}
else{
throw new Exception();
}
}
} else if (a==2) {
System.out.println("输入图书序号:");
int c=input.nextInt();
for(int i=0;i<books.length;i++){
if (c==i+1) {
z="books:"+books[i];
System.out.println(z);
}else if (c>=books.length) {
throw new ArrayIndexOutOfBoundsException();
}
}
}
else {
throw new InputMismatchException();
}
} catch (InputMismatchException e) {
System.out.println("命令错误输入错误!请根据提示输入数字命令!");
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println("图书不存在");
}catch (Exception e) {
System.out.println("图书不存在");
}
}
}
}
catch (InputMismatchException e) {
System.out.println("命令错误输入错误!请根据提示输入数字命令!");
scanner=new Scanner(System.in);
}
添加上述代码即可。就是那个慕粉32308...说的,清楚缓存
百度了一下,捕获InputMismatchException,重新进入循环后,上一次输入错误的那个还留在输入缓冲区中,继续执行nextInt()方法时,会使用输入缓冲区中的数据作为默认输入。解决方法:可以在抛出异常后,执行一次sc.next().
昨晚花点时间把try里的方法拿了出来,并加以修改,自定义了一个异常类,总算成功了,用throw抛出的三个异常都被catch捕获到了并加以提示处理,显示异常信息都是独立的三个异常类?
输入命令:1-按照名称查找图书;2-按照序号查找图书
3
命令错误输入错误!请根据提示输入数字命令!
输入命令:1-按照名称查找图书;2-按照序号查找图书
你输入3是不是这样?
并没有无限循环呀,不是抛出错误吗
Java入门第三季
409792 学习 · 4340 问题
相似问题