您的位置:首页 > 编程语言 > Java开发

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

2016-08-11 14:30 225 查看
//导包
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;
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 循环录入