电话
400 9058 355
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 声明,从源头避免隐式截断InputMismatchException 和 ArithmeticException
用户输字母代替数字会抛 InputMismatchException;除零会抛 ArithmeticException。不捕获就直接崩溃。
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 "+": resu
lt = 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 ——这两个点没处理好,程序就停在半路不动了。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...