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

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)
}

修正说明:

  1. 调整了循环下标范围,避免越界和漏读字符
  2. 统一使用Scanner读取输入,兼容性更好
  3. 拆分完成后将字符串转为Long类型,支持更大范围的数值计算
  4. 用when表达式简化分支判断,按运算符执行对应算术运算后输出结果,符合题目要求

内容的提问来源于stack exchange,提问作者mahmoud deif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:03