我可以创建一个最大大小超过999个元素的Vector吗?确切地说,我需要按索引获取超过999个元素的元素?
现在,当我尝试时会得到
Exception in thread "main" java.lang.IndexOutOfBoundsException: 1000000 is out of bounds (min 0, max 999)
代码是:“模式”由100000个元素组成
def image(pattern: Vector[Char], patSize: Int): Vector[Int] = {
@scala.annotation.tailrec
def imageCalc(i: Int, caret: Int, image: Vector[Int]): Vector[Int] = {
if (i < patSize) {
if (pattern(i) != pattern(caret)) { //CODE FAILS HERE
if (caret == 0) {
imageCalc(i + 1, caret, image.appended(0))
} else {
imageCalc(i, image(caret - 1), image)
}
} else {
println(caret + 1)
imageCalc(i + 1, caret + 1, image.appended(caret + 1))
}
} else {
image.prepended(0)
}
}
imageCalc(1, 0, Vector[Int]())
}
此代码中最可疑的部分是此行:
imageCalc(i, image(caret - 1), image)
在此代码中,image
向量中的值作为caret
值传递给递归调用。然后,将caret
参数用于索引pattern
,而无需进行任何边界检查:
if (pattern(i) != pattern(caret)) { //CODE FAILS HERE
我怀疑应该是第一行
imageCalc(i, caret - 1, image)