为什么Scanner#nextInt for for循环继续抛出异常?

 报告大王报报报报告大王 发布于 2023-01-08 15:44

我一直在学习JAVA,我对代码有一点疑问:

class apple {
    public static void main(String[] args) {

        int[] num = new int[3];

        Scanner input = new Scanner(System.in);
        for (int i = 0; i < num.length; i++) {

            try {
                num[i] = input.nextInt();
            } catch (Exception e) {
                System.out
                    .println("Invalid number..assigning default value 20");
            num[i] = 20;
            }
        }

        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }
    }
}

我编写了一个小程序来处理异常,如果用户输入不是Int抛出异常并分配默认值.如果我把扫描器语句放在for循环中,它工作正常,但如果我把它带到它之外,它会分配抛出异常的相同值,即我输入的是char而不是int.但是如果我输入所有整数,它会在数组中分配正确的值.

Scanner input = new Scanner(System.in);

我希望你们理解我的问题.

1 个回答
  • Scanner#nextInt如果它无法解析整数,则不会超过输入,所以如果你在失败后继续调用它,它将继续尝试再次解析相同的输入,抛出InputMismatchException.

    您可以Scanner#nextcatch块中调用,忽略它返回的字符串以跳过无效输入:

    try {
        num[i] = input.nextInt();
    } catch (Exception e) {
        System.out
                .println("Invalid number..assigning default value 20");
        num[i] = 20;
        input.next();
    }
    

    2023-01-08 15:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有