Kotlin Android计算器输入逻辑异常:if语句未按预期工作求助
计算器输入逻辑问题排查与修复
问题说明
有通用编程基础,刚接触Kotlin和Android开发,开发简易计算器时遇到输入逻辑异常:
- 空输入状态判断正常
- 输入第二个数字或符号后,后续所有操作都会进入「以符号结尾添加数字」分支
- 无法正确判断输入框内容的结尾类型,也没实现禁止连续输入符号的功能
核心原因
代码中错误使用了Regex.matches()方法:
matches()要求整个字符串完全匹配正则表达式,而非仅判断结尾是否符合- 你定义的
numbers = Regex("[0-9]$"),只有当输入框内容是单个数字时(比如"3"),matches()才会返回true - 一旦输入框内容长度超过1(比如"34"或"3+"),
matches()直接返回false,导致后续逻辑错误进入符号结尾的分支
修复后的代码
改用直接判断字符串最后一个字符的方式,逻辑更清晰且准确:
fun addToDisplay(toAdd: String, display: TextView) { val validSymbols = setOf('-', '.', '/', '+', '*') val currentText = display.text.toString() if (currentText.isEmpty()) { // 空输入时,不允许直接输入符号 if (!validSymbols.contains(toAdd.first())) { display.append(toAdd) println("Empty display") } } else { val lastChar = currentText.last() if (lastChar.isDigit()) { // 结尾是数字:可以追加数字或符号 display.append(toAdd) println("Ends in number: $currentText -> ${currentText + toAdd}") } else { // 结尾是符号:只能追加数字,避免连续输入符号 if (toAdd.first().isDigit()) { display.append(toAdd) println("Ends in symbol, adding number: $currentText -> ${currentText + toAdd}") } } } }
修复逻辑说明
- 用
validSymbols集合存储允许的运算符,比正则更直观 - 空输入时,判断输入内容的第一个字符是否为符号,避免直接输入符号
- 非空输入时,取输入框内容的最后一个字符:
- 若为数字:允许追加数字或符号
- 若为符号:仅允许追加数字,自动拦截连续输入符号的操作
内容的提问来源于stack exchange,提问作者FatalErrorDriveB
相关产品推荐
相关产品推荐

