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

来源:1-9 经验总结

Yme

2018-02-24 21:48

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://img2.mukewang.com/5a916bca0001b56701930185.jpg










取消注释后结果

http://img1.mukewang.com/5a916c40000190ab01970158.jpg


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

写回答 关注

1回答

  • 官哥
    2018-02-24 23:52:28

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

    慕仔1173... 回复Yme

    我也有这个疑惑,请问楼主解决了么

    2018-06-05 11:06:42

    共 2 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题