当前位置: 代码迷 >> Java相关 >> 关于JAVA Scanner类的nextInt方法接收到非法输入有关问题
  详细解决方案

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

热度:11   发布时间:2016-04-22 20:09:43.0
关于JAVA Scanner类的nextInt方法接收到非法输入问题
本帖最后由 frank1997 于 2015-05-06 23:42:12 编辑
我想用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时,程序重复不断抛出异常提示“请输入一个整型数字:”,而不能中断接收新的输入,请问这是为什么,错在哪里?

?

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

  相关解决方案