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

Kotlin代码运行触发NZEC(Run Time Error),求排查解决方法

Kotlin代码NZEC运行错误排查与解决

问题场景

编写的Kotlin代码运行时触发NZEC(非零退出码)错误,代码、测试输入及预期输出如下:

原代码

fun main(args: Array<String>){
    var rep= readLine()?: ""
    var repp= rep.toInt()

    repeat(repp){
        var n= readLine()?: ""
        var num= n.toInt()
        var lastNumber= num%10
       //println(lastNumber)
        while (num>10)
            num/=10
            //println(n)
        var sum=lastNumber+num
        println(sum)
    }
}

测试输入

3
1234
21346
156797

预期输出

5
8
8

错误原因分析

NZEC错误通常因运行时异常导致程序非零码退出,这里的核心问题是:
输入读取的空值/无效处理不严谨:使用readLine()?: ""将null转为空字符串后直接调用toInt(),若读取到空行、带空格的输入或非数字字符,会抛出NumberFormatException,直接导致程序崩溃。

另外原代码的while循环未加大括号,虽不是本次错误的直接原因,但存在可读性隐患,后续修改代码时容易出现逻辑偏差。

解决方法

步骤1:安全处理输入转换

使用toIntOrNull()替代toInt(),在转换前先校验输入是否为有效数字,避免转换异常;同时用trim()去除输入前后的空格,排除因空格导致的转换失败。

步骤2:规范循环体写法

给while循环添加大括号,明确循环范围,提升代码可读性和可维护性。

修改后的代码

fun main(args: Array<String>){
    val repStr = readLine()?.trim() ?: ""
    val repp = repStr.toIntOrNull() ?: run {
        println("无效的输入次数")
        return
    }

    repeat(repp){
        val nStr = readLine()?.trim() ?: ""
        val num = nStr.toIntOrNull() ?: run {
            println("无效的数字输入")
            return@repeat
        }
        val lastNumber = num % 10
        var firstNumber = num
        while (firstNumber > 10) {
            firstNumber /= 10
        }
        val sum = lastNumber + firstNumber
        println(sum)
    }
}

代码说明

  • trim()处理输入字符串,避免因首尾空格导致的转换失败。
  • toIntOrNull()安全转换整数,转换失败时给出提示并终止程序或跳过当前循环,避免崩溃。
  • 变量名改为firstNumber,贴合语义,提升代码可读性。
  • 给while循环添加大括号,明确循环体范围,减少后续维护风险。

内容的提问来源于stack exchange,提问作者Mr Asheq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:41:31