Android Kotlin计算器重复输入运算符问题求助
解决计算器连续输入运算符的问题
嘿,作为Android开发新手能写出这样的计算器已经很棒啦!你遇到的连续输入运算符的问题,其实只需要在追加运算符之前加个简单的判断就能解决。咱们来一步步调整你的代码:
问题根源
目前你的appendOnExpresstion方法在处理运算符时,直接就把运算符追加到表达式后面了,没有检查当前表达式的最后一个字符是不是已经是运算符,所以才会出现连续点击加号、减号的情况。
解决方案
我们可以做两个关键调整:
- 定义一个运算符集合,方便快速判断某个字符是不是运算符;
- 在追加运算符前,检查表达式的最后一个字符,如果已经是运算符,就替换掉它,而不是继续追加;如果表达式为空,除了负号(支持负数开头),其他运算符不允许直接输入。
修改后的代码
首先在你的Main类里添加一个运算符集合:
private val operators = setOf('+', '-', '*', '/', '%')
然后修改appendOnExpresstion函数:
fun appendOnExpresstion(string: String, canClear: Boolean) { if(tvResult.text.isNotEmpty()){ tvExpression.text = "" } if (canClear) { tvResult.text = "" tvExpression.append(string) } else { val currentExpression = tvExpression.text.toString() val resultText = tvResult.text.toString() var newExpression = currentExpression // 如果结果框有内容,先把结果加到表达式里 if (resultText.isNotEmpty()) { newExpression += resultText tvResult.text = "" } // 处理运算符追加逻辑 when { // 表达式为空时,只允许输入负号(支持负数开头) newExpression.isEmpty() -> { if (string == "-") { newExpression += string } } // 最后一个字符是运算符,替换成当前点击的运算符 operators.contains(newExpression.last()) -> { newExpression = newExpression.substring(0, newExpression.length - 1) + string } // 其他情况正常追加运算符 else -> { newExpression += string } } tvExpression.text = newExpression } }
额外优化(可选)
如果还想处理括号和运算符的组合(比如(+这种不合法的输入),可以再添加判断逻辑:比如检查如果最后一个字符是(,那么只允许输入负号或者数字。不过这个属于进阶优化,先解决核心的连续运算符问题就足够啦。
测试效果
现在你点击运算符的时候,如果之前已经输入了运算符,就会自动替换成新的运算符,不会出现连续的情况;而且还支持直接输入负号作为负数开头,完全符合日常计算器的使用习惯。
内容的提问来源于stack exchange,提问作者MSX
相关产品推荐
相关产品推荐

