誰想 2023-02-08 11:21 采纳率: 95.1%
浏览 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 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试