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
相关产品推荐
相关产品推荐

