誰想 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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵