猿问

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

我想用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时,程序重复不断抛出异常提示“请输入一个整型数字:”,而不能中断接收新的输入,请问这是为什么,错在哪里?



夜海风
浏览 5871回答 4
4回答

慕娘4410084

while (true) { try { id1 = sc.nextInt(); break; } catch (InputMismatchException e) { System.out.println("请输入整数型的ID:"); sc.next();// 读取下一个值,如果不加这条语句,控制台得到的还是你上次输入的数,再一次进入catch语句,所以会一直循环报错 } }

onelamp

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

viva_la_vida

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.
随时随地看视频慕课网APP

相关分类

Java
我要回答