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

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


2 个解决方案

#1


看nextInt的源码
当你输入不是整数时
会抛出异常,并且它的流指针不会往下移
所以多次读取的都是同一个数据
抛出异常不会执行后面的代码,即不输出信息也不会break跳出循环
异常被处理了没有上抛所以也不报错只运行

#2


谢谢楼上的!

#1


看nextInt的源码
当你输入不是整数时
会抛出异常,并且它的流指针不会往下移
所以多次读取的都是同一个数据
抛出异常不会执行后面的代码,即不输出信息也不会break跳出循环
异常被处理了没有上抛所以也不报错只运行

#2


谢谢楼上的!