猜数字游戏需用scanner的nextint()读整数并用hasnextint()预检,random生成1~100用nextint(100)+1,while(true)循环配合break控制流程,输入异常时消耗非法输入并清缓冲区,确保提示明确、状态更新及时。

如何用 Scanner 获取用户输入的数字
猜数字游戏的核心是反复读取用户输入并比对,必须用 Scanner 从控制台读整数。注意不能直接用 nextLine() 后再转 Integer.parseInt(),否则容易因换行符残留导致下一轮输入跳过。
- 正确做法:统一用
nextInt(),它自动跳过空白符且不残留回车 - 如果之前用过
nextLine()(比如读用户名),之后要加一次nextLine()清缓冲区 - 未输入数字时会抛
InputMismatchException,建议用hasNextInt()预检
用 Random 生成合法范围内的随机数
Random 是最常用方式,但要注意边界——nextInt(100) 生成的是 [0, 99],而猜数字通常要 [1, 100]。
- 写成
random.nextInt(100) + 1才能得到 1~100 的整数 - 别用
Math.random(),它返回double,强制转int易出精度或边界错误 - 如果需要可重现的测试结果,可以传入固定种子:
new Random(123L)
用 while 循环 + break 控制游戏流程
不能用 for 硬写固定次数,因为用户可能提前猜中;也不能靠异常退出循环,逻辑不清晰。
- 典型结构是
while (true) { ... if (guess == target) break; } - 每次循环内必须更新比较状态,避免无限循环
- 提示语要明确:比如 “太大了”、“太小了”、“恭喜猜中!”,别只写 “wrong”
- 记得在
break前输出最终结果,否则用户看不到“猜中”反馈
如何处理输入非数字或超出范围的异常情况
真实用户会输字母、负数、超大数,光靠 try-catch 不够,得结合预校验和友好提示。
立即学习“Java免费学习笔记(深入)”;
- 先用
scanner.hasNextInt()判断是否为整数,不是就调用next()消耗掉非法输入 - 读入后立即检查范围:
if (num 100),提示“请输入 1-100 之间的数字” - 不要在 catch 块里直接退出程序,应继续循环,否则一次输错就结束了
- 异常处理块里别漏掉
scanner.nextLine(),否则非法字符串残留会导致后续nextInt()失败
Scanner 的缓冲区不像人脑能自动“翻页”,每一步读取操作都影响后续行为。一个字符没清干净,整个循环就卡住。











