誰想 2023-02-08 11:21 采纳率: 91.7%
浏览 50
已结题

初学者Java遇到的小问题

用户输入一个整数,如果不是整数就提示他反复输入,直到正确;
但当我输入错误时,一直循环,没有等我输入;

public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = 0;
        while(true){
            try {
                System.out.println("输入一个整数");
                input = scanner.nextInt();
                break;
            } catch (Exception e) {
                System.out.println("你输入的不是一个整数");
            }
        }
    }
}

运行结果就是:
输入一个整数
1.1
你输入的不是一个整数
输入一个整数
一直循环

我试着把
Scanner scanner = new Scanner(System.in);
input = scanner.nextInt();
改成
input = new Scanner(system.in).nextInt();
就可以了;

但不明白为什么,求大家解惑
希望能解释细致一点,初学者正在学习

  • 写回答

5条回答 默认 最新

  • 程序员星辰 2023-02-08 11:31
    关注

    有用记得采纳,谢谢。代码中的问题是:当使用了Scanner的nextInt方法时,如果用户输入的不是整数,会抛出一个异常,但此时Scanner的缓存仍然保留着错误的输入数据。因此,在下一次调用Scanner的nextInt方法时,它将仍然返回错误的输入数据,导致代码一直在循环中。

    解决方案是:使用Scanner的nextLine方法将错误的输入数据从缓存中清除,再次读取一个整数

    
    public class Test01 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int input = 0;
            while(true){
                try {
                    System.out.println("输入一个整数");
                    input = scanner.nextInt();
                    break;
                } catch (Exception e) {
                    System.out.println("你输入的不是一个整数");
                    scanner.nextLine();
                }
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 爬取豆瓣电影相关处理
  • ¥15 手机淘宝抓清除消息接口
  • ¥15 C#无selenium
  • ¥15 LD衰减计算的结果过大
  • ¥15 用机器学习方法帮助保险公司预测哪些是欺诈行为
  • ¥15 计算300m以内的LD衰减
  • ¥15 数据爬取,python
  • ¥15 怎么看 cst中一个面的功率分布图,请说明详细步骤。类似下图
  • ¥15 为什么我的pycharm无法用pyqt6的QtWebEngine
  • ¥15 FOR循环语句显示查询超过300S错误怎么办