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

Android Kotlin计算器重复输入运算符问题求助

解决计算器连续输入运算符的问题

嘿,作为Android开发新手能写出这样的计算器已经很棒啦!你遇到的连续输入运算符的问题,其实只需要在追加运算符之前加个简单的判断就能解决。咱们来一步步调整你的代码:

问题根源

目前你的appendOnExpresstion方法在处理运算符时,直接就把运算符追加到表达式后面了,没有检查当前表达式的最后一个字符是不是已经是运算符,所以才会出现连续点击加号、减号的情况。

解决方案

我们可以做两个关键调整:

  1. 定义一个运算符集合,方便快速判断某个字符是不是运算符;
  2. 在追加运算符前,检查表达式的最后一个字符,如果已经是运算符,就替换掉它,而不是继续追加;如果表达式为空,除了负号(支持负数开头),其他运算符不允许直接输入。

修改后的代码

首先在你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:52:37