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

关于JAVA Scanner类的nextInt方法接收到非法输入问题

关于JAVA Scanner类的nextInt方法接收到非法输入问题

夜海风 2015-05-06 23:39:00
我想用Scanner接收一个整型输入,并在出现输入非整型情况时抛出异常提示,同时要求用户重新输入,用了如下代码:import java.util.Scanner;public class HelloWorld{    public static void main(String[] args){        int i = 0;        Scanner sc = new Scanner(System.in);        System.out.println("请输入数量:");        while(true) {            try {                i = sc.nextInt();                System.out.println("i="+i);                break;            } catch(Exception e) {                System.out.println("请输入一个整型数字:");            }        }    }}执行如下:请输入数量:a请输入一个整型数字:请输入一个整型数字:请输入一个整型数字:……在接收到一个非法输入a时,程序重复不断抛出异常提示“请输入一个整型数字:”,而不能中断接收新的输入,请问这是为什么,错在哪里?
查看完整描述

4 回答

?
慕娘4410084

TA贡献1条经验 获得超2个赞

while (true) {

try {

id1 = sc.nextInt();

break;

} catch (InputMismatchException e) {

System.out.println("请输入整数型的ID:");

sc.next();// 读取下一个值,如果不加这条语句,控制台得到的还是你上次输入的数,再一次进入catch语句,所以会一直循环报错

}

}


查看完整回答
2 反对 回复 2017-08-12
?
onelamp

TA贡献1条经验 获得超0个赞

同问,怎么解决这个问题呢?

查看完整回答
反对 回复 2015-10-29
?
viva_la_vida

TA贡献1条经验 获得超0个赞

sc .nextInt() 只会在找到匹配之后 才会 向前移动,因此每一次匹配仍然会在当前的输入之中进行匹配

具体可以查看:

String java.util.Scanner.next(Pattern pattern)

Returns the next token if it matches the specified pattern. This method may block while waiting for input to scan, even if a previous invocation of hasNext(Pattern) returned true. If the match is successful, the scanner advances past the input that matched the pattern.


查看完整回答
反对 回复 2015-05-07
  • 4 回答
  • 0 关注
  • 5870 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信