连续调用 nextLine() 会跳过输入,因 nextInt() 不消费回车符,nextLine() 将残留换行读作空行;应统一用 nextLine() 后转换,或在 nextInt() 后加 scanner.nextLine() 清缓存。

用 Scanner 读取用户输入时,为什么连续调用 nextLine() 会跳过输入?
这是初学者最常踩的坑:在 nextInt() 或 nextDouble() 后直接跟 nextLine(),后者会立刻返回空字符串。因为 nextInt() 只读数字,不消费回车符,而 nextLine() 会把残留的换行当作“空行”读走。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 统一用
nextLine()读所有输入,再用Integer.parseInt()或Double.parseDouble()转换 - 如果必须混用,
nextInt()后加一句scanner.nextLine()清掉换行 - 别依赖
hasNextLine()判断是否还有输入——它不阻塞,容易误判
如何安全处理除零和非法运算符?
Java 不会在编译期检查除零,运行时抛 ArithmeticException: / by zero;而传入非 +、-、*、/ 的字符,若用 if-else 链没兜底,程序就静默失败或输出错误结果。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 用
try-catch包住除法操作,捕获ArithmeticException并提示“除数不能为零” - 运算符判断必须有
else分支,打印“不支持的运算符:‘X’”,避免逻辑遗漏 - 把运算符校验提前到读入后立即做,别等到计算时才暴露问题
为什么不用 double 做金额类计算,但计算器可以?
计算器是教学场景,目标是功能完整、逻辑清晰,不是金融级精度。用 double 简单直接;而金额必须用 BigDecimal,否则 0.1 + 0.2 != 0.3。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 学生项目中,用
double接收数字、参与四则运算完全合理 - 如果想展示精度意识,可在注释里写明:“此处为演示简化,实际货币计算应使用
BigDecimal” - 避免在同一个程序里混用
int和double计算——比如用户输整数但用double存,再做除法,结果类型一致更可控
要不要把计算逻辑抽成独立方法?
要。哪怕只有几行,把 switch 运算块封装成 calculate(double a, double b, char op) 方法,好处立现:主流程干净、单元测试可写、后续加幂运算或括号支持时改动局部。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 方法返回
double,异常由调用方处理(即 main 中 try-catch),职责分明 - 参数名别用
x/y,用operand1、operand2更易读 - 不要在方法里
System.out.println()——输出交给 main,计算只管算










