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

Kotlin开发Android Studio BMI计算器点击计算按钮闪退问题求助

闪退问题修复方案

核心崩溃原因

  1. 类型不匹配错误
    你在代码中先将BMI计算结果通过String.format转为字符串类型的bmiValue,后续又把这个字符串传入String.format("%0.2f",bmiValue)尝试格式化为浮点数,类型不匹配直接触发应用崩溃。
  2. 计算公式逻辑错误(非崩溃原因,但会导致结果完全错误)
    你写的weightValue*703/heightValue*heightValue按照同级运算从左到右的规则,等价于weightValue * 703,和BMI正确计算公式「体重*703 / (身高的平方)」完全不符。

修复后的代码

计算按钮点击事件逻辑替换

calcButton.setOnClickListener{
    var heightValue = 0.0
    var weightValue = 0.0
    if(height.text.toString().isNotEmpty()){
        heightValue = height.text.toString().toDouble()
    }
    if(weight.text.toString().isNotEmpty()){
        weightValue = weight.text.toString().toDouble()
    }
    if(weightValue > 0.0 && heightValue > 0.0){
        // 加括号保证先算身高的平方,得到正确的BMI数值
        val realBmi = weightValue * 703 / (heightValue * heightValue)
        // 只格式化一次,直接用数值格式化
        val bmiStr = String.format("%0.2f", realBmi)
        bmiInfo.text = "Your BMI is $bmiStr you are ${bmiResults(realBmi)}"
        bmiInfo.visibility = VISIBLE
    }
    else {
        Toast.makeText(
            this, "请输入大于0的体重和身高数值",
            Toast.LENGTH_LONG).show()
    }
}

BMI状态判断函数优化(可选,解决边界值漏判问题)

原有代码中等于18.5、24.9、30的数值没有匹配的判断分支,优化后逻辑更严谨:

fun bmiResults(bmi:Double):String{
    return when {
        bmi < 18.5 -> "Underweight"
        bmi < 25 -> "Normal"
        bmi < 30 -> "Overweight"
        else -> "Obese"
    }
}

额外建议

后续开发遇到崩溃可以优先查看Android Studio底部Logcat面板的崩溃日志,会直接标注错误类型和出错的代码行,定位问题效率更高。

内容的提问来源于stack exchange,提问作者Dante Zelaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:54:03