Kotlin遍历数组对比相邻元素如何避免索引越界异常?
问题根因
数组越界由循环内访问arr[item + 1]的逻辑触发:
arr.indices返回的索引范围是0到arr.lastIndex(即arr.size - 1),当循环走到最后一个索引时,item + 1的值等于arr.size,超出数组合法下标范围,直接抛出越界异常。- 原代码的两个判断逻辑重复,本质都是统计相邻元素正负符号相反的次数,可以合并简化。
修复方法
核心是收窄遍历范围,只遍历到倒数第二个元素,保证每次访问item + 1都落在合法下标区间内。
修复后完整代码:
fun myFunction(arr: Array<Int>): Int{ if (arr.isEmpty()) return 0 var result = 0 // 遍历上界设为倒数第二个索引,彻底规避item+1越界 for (item in 0 until arr.size - 1) { // 两数相乘小于0即可判定为一正一负,等价于原两个判断的逻辑 if (arr[item] * arr[item + 1] < 0) { result++ } } return result }
调整点说明
- 遍历范围从全量索引改为
0 until arr.size - 1,最后一个元素没有后续相邻元素,直接不参与比较 - 合并重复的正负判断逻辑,减少冗余代码和重复数组取值操作
- 兼容单元素数组场景:当数组长度为1时,
arr.size -1等于0,0 until 0是空区间,循环不会执行,直接返回0,无越界风险
内容的提问来源于stack exchange,提问作者Bob Redity
相关产品推荐
相关产品推荐

