Kotlin实现键盘录入数组并输出时运行报错的解决方法
问题原因
代码触发异常的核心原因是Kotlin的区间语法使用错误:
0..n是双端闭区间,遍历的时候会包含端点n。比如输入数组大小为3,0..3会依次取0、1、2、3四个值- 长度为n的数组,合法索引范围是
0 ~ n-1,不存在索引为n的元素。当代码执行到访问arr[array_size]时,就会抛出ArrayIndexOutOfBoundsException数组越界异常。
修正方案
将两处循环的区间从0..array_size替换为0 until array_size即可。until生成的是左闭右开区间,遍历范围是0到array_size-1,刚好匹配数组的合法索引。
修正后的可运行代码:
fun main() { val arraySize = readLine()!!.toInt() val arr = IntArray(arraySize) for (i in 0 until arraySize) { arr[i] = readLine()!!.toInt() } for (i in 0 until arraySize) { println(arr[i]) } }
更稳妥的写法是直接使用数组内置的indices属性获取合法索引范围,或者直接遍历数组元素,完全避免手动计算索引出错:
fun main() { val arraySize = readLine()!!.toInt() val arr = IntArray(arraySize) // 用内置索引范围录入 for (i in arr.indices) { arr[i] = readLine()!!.toInt() } // 直接遍历元素输出,不需要索引 for (num in arr) { println(num) } }
内容的提问来源于stack exchange,提问作者Madiyar Zhunusov
相关产品推荐
相关产品推荐

