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

Kotlin代码抛出IndexOutOfBoundsException,求错误排查与修复

问题分析与修正

错误1:输入顺序完全颠倒

根据任务要求,输入顺序是:

  • 第1行:列表大小N
  • 第2到N+1行:N个列表元素
  • 最后1行:空格分隔的P和M

但你的代码在读取完N后,先读取了P和M,再去读取N个元素,这会导致程序把原本应该是列表第一个元素的输入当成了P和M的输入。如果这个输入只有单个数字,split(" ")会得到一个仅含1个元素的列表,此时用val (a, b)解构就会因为列表大小不足2而抛出IndexOutOfBoundsException——这就是你看到的错误原因。

错误2:判断逻辑不符合要求

题目要求P和M都在列表中才输出YES,但你用了||(逻辑或),只要其中一个存在就输出YES,这和任务要求相反,应该用&&(逻辑与)。


修正后的代码

fun main() {
    val size = readln().toInt()
    val mutList: MutableList<Int> = mutableListOf()
    
    // 先读取N个列表元素
    for (i in 0 until size) {
        mutList.add(readln().toInt())
    }
    
    // 最后读取P和M
    val (a, b) = readln().split(" ")
    val p = a.toInt()
    val m = b.toInt()
    
    // 用逻辑与判断两者都存在
    if (p in mutList && m in mutList) {
        println("YES")
    } else {
        println("NO")
    }
}

额外优化建议

  • 可以不用MutableList,直接用List:val list = List(size) { readln().toInt() },更简洁高效。
  • 解构时可以直接转Int:val (p, m) = readln().split(" ").map { it.toInt() },减少中间变量。

优化后的简洁版本:

fun main() {
    val size = readln().toInt()
    val list = List(size) { readln().toInt() }
    val (p, m) = readln().split(" ").map(String::toInt)
    println(if (p in list && m in list) "YES" else "NO")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:40:38