Java编写简易计算器输入浮点数触发InputMismatchException崩溃原因
浮点数输入触发计算器崩溃的原因与修正
核心崩溃原因
错误栈追踪指向的触发点非常明确:
- 你在读取两个运算值时,调用了
scanner.nextInt()方法。这个方法的内置输入校验规则仅接受不带小数部分的整数类型输入,一旦用户输入2.5、-1.3这类带小数点的浮点数,Scanner会因为输入格式和预期的整数类型不匹配,直接抛出InputMismatchException,终止程序运行,和你贴的崩溃日志完全对应。 - 这里容易出现一个认知偏差:即便你最后把读取到的整数赋值给
float类型的变量,这个自动类型转换的过程发生在输入成功读取完成之后,完全改变不了nextInt()本身的输入校验规则,从根源上就不支持浮点数输入场景。
修正方式
只需要把两个运算值的读取方法替换为适配浮点数场景的scanner.nextFloat()即可:
// 原实现(仅支持整数输入) // float number1 = scanner.nextInt(); // float number2 = scanner.nextInt(); // 修正后(支持浮点数输入) float number1 = scanner.nextFloat(); float number2 = scanner.nextFloat();
额外优化提示
当前代码存在一个冗余逻辑:在用户选择运算类型之前,就提前计算了加减乘除四个结果。如果用户输入的第二个运算值为0,会直接触发除零运行时异常。可以调整为等用户选定运算类型后,再执行对应分支的计算逻辑,避免非必要的异常触发。
内容的提问来源于stack exchange,提问作者Maximus1999
相关产品推荐
相关产品推荐

