必须结合异常处理、缓冲区清理和范围校验才能严格限制short输入:捕获InputMismatchException后调用next()清缓冲,再用nextLong()读取并手动检查-32768~32767范围,最后强转。

要严格限制用户输入为合法的 short 类型(即 -32768 到 32767),仅靠 Scanner.nextShort() 自身是不够的——它在遇到非法输入(如字母、超范围数字)时会抛出异常,但不会自动重试或提示错误。必须配合异常处理、输入清理和边界校验才能实现“严格限制”。
捕获 InputMismatchException 并清空非法输入缓冲区
nextShort() 遇到非数字输入(如 "abc" 或 "12.5")会抛出 InputMismatchException,但 Scanner 不会自动跳过该无效标记,下次调用仍会卡在同一位置。必须显式调用 next() 清除它:
- 使用
try-catch捕获InputMismatchException - 在
catch块中调用scanner.next()吃掉非法输入,避免死循环 - 提示用户重新输入,不退出流程
手动校验数值是否真正落在 short 范围内
nextShort() 对超出 short 范围的大整数(如 100000)也会抛出 InputMismatchException(因为内部解析失败),但某些场景下(如先读为 long 再转)需主动判断。更稳妥的做法是:先用 nextLong() 读取,再检查是否 ≤ 32767 且 ≥ -32768,最后强转:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 避免
nextShort()对大数直接崩溃,提升可控性 - 例如输入 "32768" →
nextLong()成功返回 32768 → 检查发现 > 32767 → 拒绝 - 这样能区分“格式错误”和“语义越界”,便于差异化提示
封装成可复用的安全输入方法
把上述逻辑封装为静态工具方法,既清晰又避免重复代码:
- 方法签名建议为
public static short readShort(Scanner sc, String prompt) - 循环内先打印提示,再尝试读取;失败则清除输入并重试
- 内部用
nextLong()+ 范围判断替代nextShort(),兼顾健壮性与精度 - 可选增强:支持设置最大重试次数,防止无限等待
不复杂但容易忽略的是缓冲区清理和范围二次验证——nextShort() 的“严格”只体现在类型匹配,真正的业务级严格需要你补上逻辑闭环。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










