Scanner输入时next()和nextLine()可能会发生的错误

当 scanner 的 nextXXX() 方法触发了 InputMismatchException 异常,输入的值会保留,直到你调用了 scanner 的 nextXXX() 或next()方法

public class Test1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = 0;
        while (i<2){
            try {
            System.out.println("输入一个数字:");
            int i1 = scanner.nextInt();
            System.out.println("这个数字是:"+i1);

            }catch (InputMismatchException e){
                System.out.println("输入错误"+e);
            }finally {
                i++;
            }
        }
        String s = scanner.nextLine();
        System.out.println("新数吗"+s);
    }
}

输出结果为:

Scanner输入时next()和nextLine()可能会发生的错误

 

 

如果一直InputMismatchException 异常,输入的值会一直保留

如果加上next()方法:

public class Test1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = 0;
        while (i<2){
            try {
            System.out.println("输入一个数字:");
            int i1 = scanner.nextInt();
            System.out.println("这个数字是:"+i1);

            }catch (InputMismatchException e){
                System.out.println("输入错误"+e);
                String next = scanner.next();
                System.out.println("next:"+next);
            }finally {
                i++;
            }
        }
        String s = scanner.nextLine();
        System.out.println("新数吗"+s);
    }
}

输出结果:

Scanner输入时next()和nextLine()可能会发生的错误

 

 

加入next()方法之后i可以重新从键盘输入值

那么为什么s无法重新从键盘输入值呢?

 因为:

  nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。

  其他的next的方法,如double nextDouble()  , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题

如果其他nextXXX()方法输入有效字符后输入空格,那么nextLine()也自动读取被其去掉的空格

上一篇:Linux I/O Scheduler (调度器)


下一篇:Centos7修改网卡名称