You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android简易计算器点击按钮崩溃问题求助

Android简易计算器点击按钮崩溃的解决方法

崩溃原因分析

  • 非数字字符串解析异常:buttonAddFunction方法中点击加号后会将显示内容设为空格(result.setText(" ")),此时点击数字按钮,Double.parseDouble()尝试解析空格为Double,直接抛出NumberFormatException导致崩溃。
  • 浮点数比较逻辑缺陷:用Double.parseDouble(...) == 0.0判断是否为0的方式,不仅存在浮点数精度问题,还会在显示内容为非数字(如空、空格)时触发崩溃,完全依赖字符串转数字的操作不安全。

修复方案

  1. 直接判断字符串内容:跳过解析为Double的步骤,直接判断显示文本是否为"0"或空,既符合业务逻辑,又避免解析异常。
  2. 统一运算按钮重置逻辑:将buttonAddFunction中的result.setText(" ")改为result.setText("0"),和减、乘、除按钮的重置逻辑保持一致。
  3. 优化文本获取流程:提前获取并修剪显示文本,减少重复调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:35:37