我可以创建一个最大大小超过999个元素的Vector吗? (通过索引获得大于999的elem)

问题描述 投票:0回答:1

我可以创建一个最大大小超过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]())
}
scala vector collections seq
1个回答
0
投票

此代码中最可疑的部分是此行:

imageCalc(i, image(caret - 1), image) 

在此代码中,image向量中的值作为caret值传递给递归调用。然后,将caret参数用于索引pattern,而无需进行任何边界检查:

if (pattern(i) != pattern(caret)) { //CODE FAILS HERE

我怀疑应该是第一行

imageCalc(i, caret - 1, image) 
© www.soinside.com 2019 - 2024. All rights reserved.