Android简易计算器点击按钮崩溃问题求助
Android简易计算器点击按钮崩溃的解决方法
崩溃原因分析
- 非数字字符串解析异常:
buttonAddFunction方法中点击加号后会将显示内容设为空格(result.setText(" ")),此时点击数字按钮,Double.parseDouble()尝试解析空格为Double,直接抛出NumberFormatException导致崩溃。 - 浮点数比较逻辑缺陷:用
Double.parseDouble(...) == 0.0判断是否为0的方式,不仅存在浮点数精度问题,还会在显示内容为非数字(如空、空格)时触发崩溃,完全依赖字符串转数字的操作不安全。
修复方案
- 直接判断字符串内容:跳过解析为Double的步骤,直接判断显示文本是否为
"0"或空,既符合业务逻辑,又避免解析异常。 - 统一运算按钮重置逻辑:将
buttonAddFunction中的result.setText(" ")改为result.setText("0"),和减、乘、除按钮的重置逻辑保持一致。 - 优化文本获取流程:提前获取并修剪显示文本,减少重复调用
result.getText().toString()的开销。
修改后的关键代码
修复后的buttonFunctionNumber方法
public void buttonFunctionNumber(View view) { if (view instanceof Button){ Button button = (Button) view; String str = button.getText().toString(); String currentText = result.getText().toString().trim(); // 直接判断字符串状态,避免解析异常 if (currentText.isEmpty() || currentText.equals("0")) { result.setText(str); } else { result.append(str); } } }
修复后的buttonAddFunction方法
public void buttonAddFunction(View view) { if (view instanceof Button){ String temp1 = result.getText().toString(); num1 = Double.parseDouble(temp1); sign = "+"; // 和其他运算按钮统一重置为"0" result.setText("0"); } }
额外优化建议
- 增加小数点处理逻辑:如果当前显示文本已包含小数点,点击小数点按钮时不再追加。
- 给所有字符串转Double的操作添加异常捕获,避免其他场景下的崩溃:
try { num1 = Double.parseDouble(temp1); } catch (NumberFormatException e) { Toast.makeText(this, "输入无效", Toast.LENGTH_SHORT).show(); return; }
内容的提问来源于stack exchange,提问作者Pasha Grobov
相关产品推荐
相关产品推荐

