Java里清空缓冲区的方法

在做Java异常处理的练习的时候,有这样的要求:

对一个int型变量进行输入,如果输入的不是整数,则继续输入,直到输入了整数,就打印出来

想法是这样的:使用Scanner的nextInt时,如果输入的是一个字符的话,那么会有InputMismatchException异常产生,那么我使用一个while(true)循环,在循环中输入的时候捕获该异常,如果没有异常,那么就是说nextInt能够获取到正确值,那么下一句直接break结束循环,然后打印输出;如果捕获到异常,那么继续循环。

实际运行的时候发现,如果输入了字符,结果会一直输出异常信息(在catch中加入了printStackTrace),想了想,大概和C中类似,输入缓冲区中的字符不能正常获取,所以“卡”在那里,那么如何清空输入缓冲区呢,,C下可以使用fflush(stdin)的方式,Java下没有呀,后来误打误撞想到,使用Scanner的时候传入了System.in,那如果我再new一个Scanner,再传一次的话,会不会就是新的了呢?没想到还真成了。。。

下面是代码:
		int a = 0;
		Scanner sc = new Scanner(System.in);
		while (true) {
			try {
				a = sc.nextInt();
				break;
			} catch (InputMismatchException ime) {
				//ime.printStackTrace();
				//sc.close();
				sc = new Scanner(System.in);
			}
		}
		System.out.println(a);
		sc.close();
2014.08.04后记:
再一次用到这段代码的时候,又出了NoSuchElementException异常
非常奇怪,如果把catch中的sc.close();去掉就没了。。。
好奇怪~~

你可能感兴趣的:(Java)