(Langue: scala)Les grands indices de tableau scala
J'ai un problème où je veux itérer plus de 1 million de numéros, mais pour une raison quelconque, je reçois une exception ArrayIndexOutOfBounds. La fonction que j'utilise fonctionne parfaitement pour 100 000 numéros, mais je reçois l'exception si j'ajoute un zéro.
Il ne peut pas y avoir de problème avec la taille du tableau, car j'ai construit une sorte de tableau flexible, où le tableau est d'environ 1000 éléments et chaque élément est constitué d'une liste d'éléments.
Le problème ressemble à quelque chose comme ceci:
for (x <- 1 to 1000000) {
// Do a thing
}
Can pour les boucles ne gèrent qu'un certain nombre d'éléments?
J'ai essayé d'exécuter le programme avec le "extra-espace-drapeau"
I comprennent tout le code ci-dessous pour référence, au cas où il fait une différence
object Problem14 {
class FlexArray (n : Int){
var array = new Array[List[Tuple2[Int, Int]]](n)
val size = n
for(x <- 0 until size) {
array(x) = List()
}
def insert (n : Int, value : Int) {
if (find(n) != -1) {
val i = n % size
array(i) = (n, value) :: array(i)
}
}
def read (i : Int) : List[Tuple2[Int, Int]] = {
(array(i))
}
def findAux (list : List[Tuple2[Int, Int]], n : Int) : Int = {
if (list == Nil) {
-1
} else {
val (num, value) = list.head
if (n == num) {
value
} else {
findAux(list.tail, n)
}
}
}
def find (n : Int) : Int = {
val i = n % size
findAux(array(i), n)
}
}
var accArray = new FlexArray(10000)
// denna funktion bör kallas med 1 som andra argument
def chainLength (n : Int, acc : Int) : Int = {
if (n == 1)
acc
else {
val value = accArray.find(n)
if (value != -1)
acc + value
else if (n % 2 == 0)
chainLength(n/2, acc+1)
else
chainLength(3*n+1, acc+1)
}
}
def main(args: Array[String]) {
var max = 0
var maxnum = 0
for (x <- 1 to 1000000) {
var value = chainLength(x, 1)
accArray.insert(x, value)
if (max < value) {
max = value
maxnum = x
}
println(maxnum + ": " + max)
}
}