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

Scanner中用nextInt(输入非数字),产生异常后再执行输入时的现象

package test1;

import java.util.Scanner;

public class test {
	Scanner cmd = new Scanner(System.in);
	String [] bookName = {"高数","数据结构"};
	
	public  int inputCommand(){
		int command;
		try {
			command = cmd.nextInt();
			return command;
		} catch (Exception e) {
			cmd = new Scanner(System.in);
			return -1;
		}
	}
	
	public String searchSerial() throws Exception{
		System.out.println("输入序号:");
		while(true)
		{
		try {
		int serial = cmd.nextInt();
			return bookName[serial];
		}catch(Exception e) {
//			cmd = new Scanner(System.in);  //如果注释掉这一行就会发生图中的错误
			throw new Exception("图书不存在 s");
		}
		}
	}
	
	public static void main(String[] args) {
		test t =new test();
		while(true)
		{
			try {
				System.out.println("输入命令,1-按名称查找,2-按序号查找");
				int i=t.inputCommand();
				switch (i)
				{
				case 2:
				{
					System.out.println("book:"+t.searchSerial());
					break;
				}
				case -1:
				{
					System.out.println("命令输入错误!请根据提示输入数字命令!");
					continue;
				}
				default:
				{
					System.out.println("命令输入错误!");
					continue;
				}
				}
				break;
			}catch(Exception e)
			{
				System.out.println(e.getMessage());
				continue;
			}
		}
	}
}

注释的那一行cmd = new Scanner(System.in);


http://img1.sycdn.imooc.com//5a916bca0001b56701930185.jpg










取消注释后结果

http://img1.sycdn.imooc.com//5a916c40000190ab01970158.jpg


请大神给我讲讲内部的原理,个人理解是输入的值还被保存着但是不知道为啥在执行一次就没了。。

正在回答

1 回答

在选择图书的时候抛出异常后,将异常捕获后你有抛到外层了 然后在main的switch中被捕获

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

Yme 提问者

cmd = new Scanner(System.in); //如果注释掉这一行就会发生图中的错误 如果注释掉这一行,会弹出选择图书的异常,而且还会自己抛一次类型的异常,再出现输入选择类型 还是有点疑惑
2018-02-25 回复 有任何疑惑可以回复我~
#2

慕仔1173296 回复 Yme 提问者

我也有这个疑惑,请问楼主解决了么
2018-06-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

Scanner中用nextInt(输入非数字),产生异常后再执行输入时的现象

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