2012-02-21 12 views
7

Nunca pensé que estaría pidiendo una pregunta tan simple, pero ¿cómo puedo actualizar elemento de la matriz en la ScalaScala elementos de actualización de matriz

he declarado función interna dentro de mi objeto principal y tengo algo como esto

object Main 
{ 
    def main(args: Array[String]) 
    { 
     def miniFunc(num: Int) 
     { 
      val myArray = Array[Double](num) 
      for(i <- /* something*/) 
       myArray(i) = //something 
     } 
    } 
} 

pero siempre recibo una excepción, ¿podría alguien explicarme por qué y cómo puedo solucionar este problema?

+0

Lo que me confunde un poco algunas veces es cuando matrices y otras colecciones en Scala se dice que son inmutables por lo que es de suponer que la actualización de elementos de la matriz no es posible (como por ejemplo, en la Scala de una silla) pero lo que realmente significa es que una vez creada como una las dimensiones no se pueden cambiar, pero el contenido sí ... –

+0

Muchas colecciones son inmutables en Scala, pero las matrices son solo matrices de Java, y son mutables. –

Respuesta

11

¿Puede completar los datos que faltan? Por ejemplo, ¿qué pasa donde están los comentarios? ¿Cuál es la excepción? (Siempre es mejor hacer una pregunta con un ejemplo de código completo y para que quede claro lo es el problema.)

He aquí un ejemplo de la construcción de la matriz y puesta al día:

scala> val num: Int = 2 
num: Int = 2 

scala> val myArray = Array[Double](num) 
myArray: Array[Double] = Array(2.0) 

scala> myArray(0) = 4 

scala> myArray 
res6: Array[Double] = Array(4.0) 

Tal vez usted está haciendo la suposición de que num representa el tamaño de su matriz? De hecho, es simplemente el (único) elemento de tu matriz. Tal vez quería algo como esto:

def miniFunc(num: Int) { 
     val myArray = Array.fill(num)(0.0) 
     for(i <- 0 until num) 
      myArray(i) = i * 2 
    } 
+0

sí, pensé que num representa el tamaño de una matriz, Gracias – user1224307

+1

@ user1224307 Solo representa el tamaño si usa la palabra clave 'new'. 'Array (1, 2, 3)' es solo una matriz con los elementos 1, 2 y 3. –

+2

Vale la pena señalar que puede inicializar la matriz con Array.tabulate, por ejemplo, Array.tabulate (10) (identity) da Array [Int] (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) y Array.tabulate (10) (_ * 2) da Array [Int] (0, 2, 4, 6) , 8, 10, 12, 14, 16, 18) –

Cuestiones relacionadas