You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Scanner验证的while循环出现输入校验失败问题

解决Scanner整数范围校验的输入验证问题

嘿,我一眼就看出你这段代码里的问题所在啦!咱们来拆解一下:

你的第二个while循环里连续调用了三次filmScanner.nextInt()——每次调用这个方法都会从输入流里读取一个新的整数,这直接导致了验证逻辑混乱:

比如你输入了一个不符合范围的数(比如6),第一次nextInt()读走了6,判断出它不在1-5之间;紧接着循环里又调用nextInt(),这时候程序会卡住等着用户再输入一个数,而不是重新校验刚才的那个6,这肯定会出现输入验证失败的问题。

修正后的代码

public void promptFilmRating() {
    // 第一步:确保输入是整数
    while (!filmScanner.hasNextInt()) {
        System.out.println("Please enter a number instead of text.");
        filmScanner.next(); // 清除无效的非整数输入
    }
    int inputRating = filmScanner.nextInt(); // 把合法整数暂存到变量里
    
    // 第二步:校验范围,不符合则重新输入
    while (inputRating > 5 || inputRating < 1) {
        System.out.println("Your number is outside of the rating boundaries, enter a number between 1 and 5.");
        
        // 再次校验输入是否为整数(防止用户输入错误范围后又输入文本)
        while (!filmScanner.hasNextInt()) {
            System.out.println("Please enter a number instead of text.");
            filmScanner.next();
        }
        inputRating = filmScanner.nextInt(); // 更新暂存变量为新的合法整数
    }
    
    filmRatingOutOfFive = inputRating; // 最后把符合要求的值赋值给成员变量
}

关键修正点

  • 用inputRating变量暂存读取到的整数,避免重复调用nextInt()消耗输入流里的内容
  • 在范围校验的循环内,再次加入非整数的校验逻辑,覆盖用户可能的各种错误输入场景
  • 只有当输入完全符合要求(是整数且在1-5之间)时,才将值赋值给filmRatingOutOfFive

内容的提问来源于stack exchange,提问作者marrimred99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:11:09