如何修复Kotlin代码运行时出现的NullPointerException空指针异常
错误根因
你遇到的空指针异常完全由第9行的readLine()!!.toInt()代码触发:
Kotlin的readLine()函数在输入流没有更多内容可读时会返回null,你用非空断言运算符!!强制声明该返回值非空,一旦readLine()返回null就会直接抛出空指针异常。
常见触发场景有两种:
- 本地运行时没有依次输入5个整数就提前结束了输入
- 在线判题平台的输入格式和你的读取逻辑不匹配:多数编程题会把5个整数放在同一行用空格分隔,而你的代码是按行读取5次,自然读不到足够的内容触发异常。
修复方案
适配按行输入场景
如果题目要求每行输入一个整数,把输入读取逻辑替换为非空校验版本,避免无意义的空指针,同时给出明确报错:
for (i in 1..5) { val input = readLine() ?: throw IllegalArgumentException("需要输入5个整数,当前输入不足") integers.add(input.toInt()) }
适配单行空格分隔输入场景
如果题目是把5个整数放在同一行输入,直接替换输入读取逻辑即可:
// 读取单行输入,按空格分割后转成整数列表,取前5个值 val integers = readLine()!!.split(" ").map { it.toInt() }.take(5)
代码优化建议
你不需要声明4个集合存储对应类型的数字,直接用4个计数变量即可,逻辑更简洁内存占用也更低:
fun main(args: Array<String>) { var evenCount = 0 var oddCount = 0 var positiveCount = 0 var negativeCount = 0 // 可替换为适配你输入场景的读取逻辑,这里以单行输入为例 val integers = readLine()!!.split(" ").map { it.toInt() }.take(5) integers.forEach { num -> // 统计奇偶 if (num % 2 == 0) evenCount++ else oddCount++ // 统计正负 if (num > 0) positiveCount++ else if (num < 0) negativeCount++ } println("$evenCount even(s)") println("$oddCount odd(s)") println("$positiveCount positive(s)") println("$negativeCount negative(s)") }
注意事项
- Kotlin中不要随意使用
!!非空断言,除非你100%确定该位置不可能返回null,优先用?:空合并运算符或者非空判断逻辑处理空值。 - 做编程题之前先确认输入格式:是每行一个值还是单行多个值分隔,避免读取逻辑和输入不匹配导致的运行错误。
内容的提问来源于stack exchange,提问作者srtklein
相关产品推荐
相关产品推荐

