kotlin - 如何解决 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 有许多有用的功能来做这样的事情,包括一个完全按照你想要做的事情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
}
推荐阅读
- javascript - 如何在javascript中设置函数执行时间的限制?
- c# - $.validator.unobtrusive.adapters.addBool() 不起作用
- javascript - 将字符串数组转换为具有这些字符串作为属性和空值的对象
- github - 如何从 GitHub REST API 获取 nuget 包的最新版本号?
- python - 美丽的汤刮电影标题和图像
- ssl - 在带有 Route53 DNS 的 EKS 上配置 LE 通配符证书
- cypress - Cypress mochawesome 报告:在执行生成 HTML 报告的命令时出现“找不到命令:marge”错误
- kotlin - 在 Kotlin 中取消转义并获取 Unicode 字符串
- angularjs - 在 app.module.ts 加载(Angular)之前调用函数以获取 JSON 对象
- listview - 如何将 ListView/CollectionView 的 DataTemplate 绑定到 ViewModel 属性