Kotlin计算器开发问题:点击等号按钮返回null值求排查建议
计算器点击等于返回null的问题排查与修复要点
核心问题:运算符匹配失败
看你提供的运算符赋值代码,除法按钮的赋值多了一个空格:
binding.btnDel.id -> { op = "/ " // 这里的空格导致后续匹配失败 }
而buEqualEvent的when分支判断的是无空格的"/",当用户点击除法按钮后,op的值是"/ ",完全匹配不到任何分支,导致finalNumber始终为null,调用toString()就会显示null。
修复:把除法的赋值改成op = "/",去掉多余空格。
其他需要注意的错误与优化点
空值与非数字校验
oldNumber或newNumber为空、或者无法转成数字时,直接调用toDouble()会崩溃,需要提前校验:fun buEqualEvent(view: View) { val newNumber = binding.rezStr.text.toString() val oldNum = oldNumber.toDoubleOrNull() ?: return // 转失败直接终止逻辑 val newNum = newNumber.toDoubleOrNull() ?: return var finalNumber: Double? = null when (op) { "*" -> finalNumber = oldNum * newNum "/" -> finalNumber = oldNum / newNum "+" -> finalNumber = oldNum + newNum "-" -> finalNumber = oldNum - newNum } // ...后续逻辑 }给when语句加默认分支
万一op出现意料外的值(比如拼写错误),添加默认分支避免finalNumber为null:when (op) { // 现有分支... else -> { binding.rezStr.text = "无效运算符" isNewOp = true return } }除法除数为0的处理
除数为0时会抛出算术异常,需要提前判断:"/" -> { if (newNum == 0.0) { binding.rezStr.text = "不能除以0" isNewOp = true return } finalNumber = oldNum / newNum }初始化状态校验
oldNumber初始为空字符串,若用户未输入数字就点运算符,后续转Double会失败,可在运算符点击事件里加判断:fun buOpEevent(view: View) { val currentText = binding.rezStr.text.toString() if (currentText.isEmpty()) return // 空输入时不执行后续逻辑 // ...现有赋值逻辑 oldNumber = currentText }
内容的提问来源于stack exchange,提问作者KsKlim
相关产品推荐
相关产品推荐

