Могу ли я создать вектор с максимальным размером более 999 элементов? (получить элемент по индексу более 999) - PullRequest
0 голосов
/ 03 марта 2020

Могу ли я создать вектор с максимальным размером более 999 элементов? Точно, мне нужно получить элемент по индексу, который больше 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]())
}

1 Ответ

1 голос
/ 03 марта 2020

Наиболее подозрительным битом этого кода является строка:

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

В этом коде значение вектора image передается как значение caret рекурсивному вызову. Параметр caret затем используется для индексации pattern без проверки границ:

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

Я подозреваю, что первая строка должна быть

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