
本文详解 java 中斐波那契数列上限输入的健壮性校验,重点解决因 scanner 缓冲区残留导致的无限错误循环问题,并提供清晰、可复用的输入验证方案。
本文详解 java 中斐波那契数列上限输入的健壮性校验,重点解决因 scanner 缓冲区残留导致的无限错误循环问题,并提供清晰、可复用的输入验证方案。
在实现斐波那契数列生成器时,仅依赖 try-catch 捕获异常是不够的——关键在于清理输入缓冲区。原始代码中,当用户输入非数字(如 "abc")时,in.nextDouble() 抛出 InputMismatchException,但非法字符串仍滞留在 Scanner 缓冲区中;下一次循环再次调用 in.nextDouble() 会立即重读该残留输入,从而触发相同异常,形成「提示→报错→再提示→再报错」的无限循环。
根本解决方案是在 catch 块中显式消费掉无效输入:
catch (InputMismatchException e) {
System.err.println("The Fibonacci Sequence only works with positive whole numbers, please enter a positive integer.");
in.nextLine(); // ← 关键!清空缓冲区中未被解析的非法字符
}
更进一步,既然斐波那契上限必须是非负整数,应直接使用 nextInt() 而非 nextDouble(),避免浮点数校验的冗余逻辑(如 number % 1 != 0)。同时,推荐用 for(;;) 替代嵌套的 do-while 条件判断,使流程更清晰。以下是优化后的完整实现:
in.next()










