Kotlin 错误:计算数组和时发生IndexOutOfBoundsException
我正在计算数组的和Kotlin 错误:计算数组和时发生IndexOutOfBoundsException,kotlin,exception,compiler-errors,Kotlin,Exception,Compiler Errors,我正在计算数组的和 fun main (args: Array<String>) { var myArray = arrayOf(66, 23, 5, 46, 76, 56, 3, 277, 6, 9494, 574, 34, 23, 6467, 13, 64, 75, 634, 234, 2314) println("The sum of the array is: ${getSumArray(myArray)}") } fun getSumA
fun main (args: Array<String>) {
var myArray = arrayOf(66, 23, 5, 46, 76, 56, 3, 277, 6, 9494, 574, 34, 23, 6467, 13, 64, 75, 634, 234, 2314)
println("The sum of the array is: ${getSumArray(myArray)}")
}
fun getSumArray(myArray: Array<Int>): Int {
var total = 0
var index = 0
for (number in myArray) {
do {
total = total + myArray[index]
index++
} while (index < myArray.size)
}
return total
}
fun main(args:Array){
var myArray=arrayOf(66,23,5,46,76,56,3277,69494,574,34,236467,13,64,75634234314)
println(“数组的和为:${getSumArray(myArray)}”)
}
fun getSumArray(myArray:Array):Int{
var总计=0
var指数=0
for(myArray中的数字){
做{
总计=总计+myArray[索引]
索引++
}while(索引
IDE打印一个错误:
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:
索引20超出长度为20的范围
练习SKT.getSumArray(练习kt:19)在
主要练习(练习kt:12)
我发现:
公共类IndexOutOfBoundsException扩展了引发的运行时异常
指示某种类型的索引(例如到数组、到
字符串或向量)超出范围
我的理解是,
索引
超出了myArray.size
的范围。为什么会这样?对于(myArray中的数字)循环的目的是什么?这是这个错误的根源。在这个循环的第一次迭代之后,索引
变量等于myArray.size
。在下一次迭代中,您会得到这个异常,因为在do while循环中,主体首先执行,然后检查条件
顺便说一句,kotlin中为数组定义了一个很好的方法。您将迭代数组两次,一次使用for
循环和内部do while
循环。由于索引
是在两个循环之外定义的,因此它被分配给myArray.size
。尝试访问索引大于size-1的数组元素将抛出ArrayIndexOutOfBoundsException
如何调试
对于初学者,开始在代码中添加print
语句,查看特定时刻的值。如果您使用的是Intellij之类的IDE,请开始使用断点检查值是否在运行时可用
这里有几个替代方案来解决这个问题
只使用for循环
fun getSumArray(myArray: Array<Int>): Int {
var total = 0
for (number in myArray) {
total += number
}
return total
}
fun getSumArray(myArray:Array):Int{
var总计=0
for(myArray中的数字){
总数+=个数
}
返回总数
}
或者使用while循环
fun getSumArray(myArray: Array<Int>): Int {
var total = 0
var index = 0
do {
total = total + myArray[index]
index++
} while (index < myArray.size)
return total
}
fun getSumArray(myArray:Array):Int{
var总计=0
var指数=0
做{
总计=总计+myArray[索引]
索引++
}while(索引
或者使用Kotlin的现有函数来获取和
fun getSumArray(myArray: Array<Int>): Int {
return myArray.sum()
}
fun getSumArray(myArray:Array):Int{
返回myArray.sum()
}
一些附加(不必要)选项
fun getSumArray(myArray:Array):Int{
var总计=0
myArray.forEach{
总数+=它
}
返回总数
}
fun getSumArray(myArray:Array):Int{
返回myArray.reduce{acc,n->acc+n}
}
为(myArray中的数字){
在之后添加println(数字)
。
fun getSumArray(myArray: Array<Int>): Int {
var total = 0
myArray.forEach {
total+=it
}
return total
}
fun getSumArray(myArray: Array<Int>): Int {
return myArray.reduce { acc, n -> acc + n }
}