Kotlin开发Android Studio BMI计算器点击计算按钮闪退问题求助
闪退问题修复方案
核心崩溃原因
- 类型不匹配错误
你在代码中先将BMI计算结果通过String.format转为字符串类型的bmiValue,后续又把这个字符串传入String.format("%0.2f",bmiValue)尝试格式化为浮点数,类型不匹配直接触发应用崩溃。 - 计算公式逻辑错误(非崩溃原因,但会导致结果完全错误)
你写的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
相关产品推荐
相关产品推荐

