java Scanner类的nextInt方法接受非法输入问题

java Scanner类的nextInt方法接受非法输入问题

问题代码

package com.zy.code.t1;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean flag = true;

        while (flag) {
            System.out.println("请输入一个数字");
            int num = 0;
            try {
                num = scanner.nextInt();
            } catch (InputMismatchException e) {
                System.out.println(e.toString() + "输出格式有误!!!");
                // scanner.next();

            }
            switch (num) {
                case 1:
                    System.out.println("选项1");
                    break;
                case 2:
                    System.out.println("选项2");
                    break;
                case 3:
                    flag = false;
                    break;
                default:
                    System.out.println("重新输入");
                    break;
            }
        }


    }
}

结果:

image-20210324085007245

  • 原因

    nextInt()方法直接受整型数据,如果输入非整型,就会有异常,就不会读取文本缓冲区的内容,文本缓存区的内容就不会消失,即使下次再调用nextInt()方法,因为文本缓存区的内容并未被读取一直存在,异常就继续发生,依次循环。

  • 解决方法

    在catch里中加入Scanner.next()方法,读取缓冲区的内容,清空缓存区 

    package com.zy.code.t1;
    
    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class Demo1 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            boolean flag = true;
    
            while (flag) {
                System.out.println("请输入一个数字");
                int num = 0;
                try {
                    num = scanner.nextInt();
                } catch (InputMismatchException e) {
                    System.out.println(e.toString() + "输出格式有误!!!");
                    //处理的输入的不合理值
                    scanner.next();
    
                }
                switch (num) {
                    case 1:
                        System.out.println("选项1");
                        break;
                    case 2:
                        System.out.println("选项2");
                        break;
                    case 3:
                        flag = false;
                        break;
                    default:
                        System.out.println("重新输入");
                        break;
                }
            }
        }
    }
    

    结果

image-20210324090406230

参考链接

posted @ 2021-03-24 09:07  小黑洽  阅读(245)  评论(0)    收藏  举报