2012-02-21 7 views
7

non ho mai pensato che sarei chiedendo una semplice domanda così, ma come faccio a aggiornare elemento dell'array a ScalaScala elementi aggiornamento Array

ho dichiarato funzione interna dentro il mio oggetto principale e ho qualcosa di simile

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

ma ottengo sempre un'eccezione, qualcuno potrebbe spiegarmi perché e come posso risolvere questo problema?

+0

Ciò che mi confonde un po 'a volte è quando le matrici e le altre collezioni in Scala si dice che sono immutabili così si potrebbe supporre che l'aggiornamento elementi di un array non è possibile (come ad esempio in Scala Saddle) ma ciò che in realtà significa è che una volta creato come una dimensione non può essere modificato ma il contenuto sì ... –

+0

Molte collezioni sono immutabili in Scala, ma gli array sono solo array Java e sono mutabili. –

risposta

11

Potete compilare i dettagli mancanti? Ad esempio, cosa va dove sono i commenti? Qual è l'eccezione? (E 'sempre meglio fare una domanda con un esempio di codice completo e per rendere chiaro quello è il problema.)

Ecco un esempio di costruzione Array e aggiornamento:

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) 

Forse si stanno facendo l'ipotesi che num rappresenti la dimensione dell'array? In realtà, è semplicemente l'elemento (solo) del tuo array. Forse si voleva qualcosa di simile:

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

sì, ho pensato che num rappresenta la dimensione di un array, Grazie – user1224307

+1

@ user1224307 Rappresenta solo la dimensione se si utilizza la parola chiave 'new'. 'Array (1, 2, 3)' è solo un array con gli elementi 1, 2 e 3. –

+2

Vale la pena sottolineare che è possibile inizializzare l'array con Array.tabulate in modo che ad esempio Array.tabulate (10) (identity) dia Array [Int] (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) e Array.tabulate (10) (_ * 2) fornisce Array [Int] (0, 2, 4, 6 , 8, 10, 12, 14, 16, 18) –