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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:45:03