Java简单计算器需处理三关键点:统一用nextLine()读输入并parseDouble转换,避免换行符残留;变量全用double声明防止整数除法截断;捕获NumberFormatException和ArithmeticException确保异常不崩溃。

Java 中写一个能跑起来的简单计算器,核心不是堆功能,而是先让加减乘除四则运算在控制台正确执行——这需要明确表达式解析顺序、避免整数除法截断、处理用户输入异常这三个关键点。
用 Scanner 读输入时必须跳过换行符残留
用户输入数字后按回车,nextDouble() 不会吞掉换行符,紧接着调用 nextLine() 会立刻读到空字符串。这不是 bug,是 Scanner 的缓冲区行为。
- 统一用
nextLine()读所有输入,再用Double.parseDouble()转数字 - 或在
nextDouble()后加一句scanner.nextLine()清空缓冲区 - 别用
next()读操作符——它只读到第一个空白,但用户可能输 " + " 或 "+ "
别直接用 / 做除法——整数除会丢精度
如果声明 int a = 5, b = 2;,a / b 结果是 2,不是 2.5。计算器默认要小数结果。
- 确保至少一个操作数是
double类型,比如(double) a / b或a / (double) b - 变量类型全部用
double声明,从源头避免隐式截断 - 如果支持连续计算(如 1+2*3),需额外处理运算符优先级,基础版先用括号限定顺序
捕获 InputMismatchException 和 ArithmeticException
用户输字母代替数字会抛 InputMismatchException;除零会抛 ArithmeticException。不捕获就直接崩溃。
立即学习“Java免费学习笔记(深入)”;
try {
double a = Double.parseDouble(scanner.nextLine().trim());
String op = scanner.nextLine().trim();
double b = Double.parseDouble(scanner.nextLine().trim());
double result;
switch (op) {
case "+": result = a + b; break;
case "-": result = a - b; break;
case "*": result = a * b; break;
case "/":
if (b == 0) throw new ArithmeticException("除数不能为零");
result = a / b;
break;
default: throw new IllegalArgumentException("不支持的操作符: " + op);
}
System.out.println("结果: " + result);
} catch (NumberFormatException e) {
System.out.println("输入错误:请输入有效数字");
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
}真正卡住人的往往不是逻辑,而是第一次输入后第二行读不到内容,或者 5/2 显示 2 ——这两个点没处理好,程序就停在半路不动了。









