Kotlin处理无分隔数字串算术运算,现有代码求正确性校验
代码问题排查与修正
现有代码存在以下几处明显错误:
- 索引使用错误:Kotlin的字符串下标从0开始,你写的循环范围
1..s.length会跳过第一个字符,且访问s[s.length]时会触发数组越界异常,正确范围应为0 until s.length - 输入读取逻辑冗余:你定义了Scanner对象但没有使用,部分环境下
read()可能无法正常读取输入,建议直接调用scanner.next()获取输入字符串 - 未执行实际算术运算:你拆分得到的
a和b都是字符串类型,当前加法逻辑是字符串拼接,其余运算仅输出表达式字符串,完全没有完成要求的算术计算 - 缺少类型转换:需要将字符串形式的数字转为数值类型才能执行运算
修正后的可运行代码如下:
import java.util.Scanner fun main(args:Array<String>) { val scanner = Scanner(System.`in`) val s: String = scanner.next() var op: Char? = null var num1Str = "" var num2Str = "" var findOp = false for (i in 0 until s.length) { val c = s[i] if (c == '+' || c == '-' || c == '*' || c == '/') { op = c findOp = true } else { if (findOp) { num2Str += c } else { num1Str += c } } } val a = num1Str.toLong() val b = num2Str.toLong() val result = when(op) { '+' -> a + b '-' -> a - b '*' -> a * b '/' -> a / b else -> 0 } println(result) }
修正说明:
- 调整了循环下标范围,避免越界和漏读字符
- 统一使用Scanner读取输入,兼容性更好
- 拆分完成后将字符串转为Long类型,支持更大范围的数值计算
- 用when表达式简化分支判断,按运算符执行对应算术运算后输出结果,符合题目要求
内容的提问来源于stack exchange,提问作者mahmoud deif
相关产品推荐
相关产品推荐

