首页 > 解决方案 > 如何解决 Kotlin 中长度为 7 的索引 7 越界?

问题描述

奇怪的是,在另一个函数中使用 list 时,我在 Kotlin 中收到以下错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 7
    at java.base/java.util.Arrays$ArrayList.get(Arrays.java:4164)
    at MainKt.findNumIndex(main.kt:19)
    at MainKt.main(main.kt:9)
    at MainKt.main(main.kt)

我正在工作的代码如下:

fun main() {
    val list = listOf<Int>(3, 2, 5, 1, 5, 6, 7)
    println("The list looks like the following: $list")

    println("Search for this number:")
    var searchNum = readLine()?.toInt()

    if(searchNum != null) {
        val index = findNumIndex(list, searchNum)
        println("The index of $searchNum is $index")
    }

}

fun findNumIndex(list: List<Int>, searchNum: Int): Int {
    var indexPosition: Int = 0

    for(i in list) {
        if(list[i] == searchNum) {
            indexPosition = i
        } else {
            indexPosition = -1
        }
    }

    return indexPosition
}

基本上,我正在开发一个程序,在该程序中,您提供一个要从列表中查找其索引的数字

标签: kotlin

解决方案


一般来说,如果可能的话,最好避免手动计算列表索引,以避免错误和其他容易引入的错误。

Kotlin 有许多有用的功能来做这样的事情,包括一个完全按照你想要做的事情indexOf

val index = list.indexOf(searchNum)

要回答您的实际问题,如果您想手动循环遍历索引而不是元素,您可以使用for(i in list.indices). 您还应该在找到索引后立即返回,否则您将在找到它后继续循环并最终返回-1

fun findNumIndex(list: List<Int>, searchNum: Int): Int {
    for(i in list.indices) {
        if(list[i] == searchNum) {
            return i
        }
    }

    return -1
}

推荐阅读