nextInt()方法在无限循环中,无法停止的问题

//导包
import java.util.Scanner;

class ScannerDemo {
	public static void main(String[] args) {
		//创建键盘录入
		Scanner scanner = new Scanner(System.in);
		
		//希望获取键盘录入的数字
		System.out.println("请输入一个0-9的数字:");
		
		/**
		nextInt()方法可能抛出的3种异常
		1.InputMismatchException - if the next token does not match the Integer regular expression, 
			or is out of range
		2.NoSuchElementException - if input is exhausted
		3.IllegalStateException - if this scanner is closed
		*/
		//建立外层无限循环
		while(true) {
			try {
				//首先采用nextInt方法,当采用该方法时,如果输入了字母,就会一直提示"您的输入有误,请重新输入数字0-9"
				
				//int num = scanner.nextInt();
				//采用next()方法,和Integer包装器的parseInt方法,获取输入的值,实现了这种想法
				/**
				原因是:(摘自百度知道(作者_泳天幻少)):
	http://zhidao.baidu.com/link?	url=Lq2g1_JH6oFTZZCzWjivQktRwOGr6qkPgwAE9XuPVGSXTgDyWt1D4RltM3o3LZmTzm_XBMZX1BtlOeuL7bNVh7yR5SPEkQ6HsSJXpeZT_Ae)
					出现InputMismatch后一直循环:
					当扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳它。
					这是java API文档中的原话。
					意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其它格式解析。
					那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清<span style="white-space:pre">					</span>除,这时继续解析a,还是错误,于是这个过程就一直重复下去了。
					现在你要改的是,出现错误把这次的输入清除,只要在catch中,加一句:input.next()就搞定了!
					也可以将Scanner写在try里面
				*/
				int num = Integer.parseInt(scanner.next());
				if (!(num >= 0 && num <= 9)) {
					//如果输入的数字不符合需求,提示错误后,继续等待录入
					System.out.println("您的输入有误,请重新输入数字0-9");
					continue;
				} else {
					System.out.println("num =" + num);
					break;
				}
			
			} catch (Exception e) {
				//发生异常后希望给出提示,继续录入
				
				System.out.println("您的输入有误,请重新输入数字0-9");
				continue;
			}
		}
		

	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值