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

大神看一下这个怎么改,开头输入0和1以外的居然无限循环,输入书名都异常,,,

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("图书不存在");

}

}

}


}


正在回答

5 回答

 catch (InputMismatchException e) {

System.out.println("命令错误输入错误!请根据提示输入数字命令!");

scanner=new Scanner(System.in);

}

添加上述代码即可。就是那个慕粉32308...说的,清楚缓存

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

百度了一下,捕获InputMismatchException,重新进入循环后,上一次输入错误的那个还留在输入缓冲区中,继续执行nextInt()方法时,会使用输入缓冲区中的数据作为默认输入。解决方法:可以在抛出异常后,执行一次sc.next().

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

昨晚花点时间把try里的方法拿了出来,并加以修改,自定义了一个异常类,总算成功了,用throw抛出的三个异常都被catch捕获到了并加以提示处理,显示异常信息都是独立的三个异常类?

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

输入命令:1-按照名称查找图书;2-按照序号查找图书

3

命令错误输入错误!请根据提示输入数字命令!

输入命令:1-按照名称查找图书;2-按照序号查找图书

你输入3是不是这样?

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

宝慕林6553388

但输入数字以外时系统自动抛出异常,昨晚花点时间修改了一下成功了
2017-07-10 回复 有任何疑惑可以回复我~

并没有无限循环呀,不是抛出错误吗


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

超神crazy 提问者

就是无限循环抛出的输入不匹配错误,还有上面的图书名称无论输入什么都抛出错误
2017-07-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

大神看一下这个怎么改,开头输入0和1以外的居然无限循环,输入书名都异常,,,

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