2012-02-21 13 views
7

nigdy nie myślałem, że chciałbym być pytaniem takie proste pytanie, ale w jaki sposób mogę zaktualizować element tablicy w ScalaScala elementy aktualizowanie Array

I zadeklarowały funkcję wewnętrzną w moim głównym celem i mam coś takiego

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

ale zawsze mam wyjątek, Czy ktoś może mi wyjaśnić, dlaczego i jak mogę rozwiązać ten problem?

+0

Co myli mi trochę kilka razy kiedy Tablice i inne kolekcje w Scala są uważane za niezmienne, tak by przyjąć, że aktualizacja elementów tablicy nie jest możliwe (jak np w Scala Saddle), ale oznacza to, że raz utworzone jako wymiary nie mogą zostać zmienione, ale zawartość tak ... –

+0

Wiele kolekcji jest niezmiennych w Scali, ale tablice są tylko tablicami Java i są zmienne. –

Odpowiedz

11

Czy możesz podać brakujące dane? Na przykład, gdzie są komentarze? Czym jest wyjątek? (Jest to zawsze najlepiej zadać pytanie z pełnej próbki kodu i aby było jasne co jest problem.)

Oto przykład budowy tablicy i aktualizowania:

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) 

Może robisz założenie, że num reprezentuje rozmiar twojej tablicy? W rzeczywistości jest to po prostu element (jedyny) w twojej tablicy. Może chciał coś takiego:

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

Tak, myślałem, że liczba oznacza rozmiar tablicy, Dzięki – user1224307

+1

@ user1224307 Reprezentuje ona tylko rozmiar, jeśli używasz słowa kluczowego 'new'. 'Array (1, 2, 3)' jest po prostu tablicą z elementami 1, 2 i 3. –

+2

Warto zwrócić uwagę, że można zainicjować tablicę za pomocą Array.tabulate, więc na przykład Array.tabulate (10) (tożsamość) daje Array [Int] (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) i Array.tabulate (10) (_ * 2) daje Array [Int] (0, 2, 4, 6) 8, 10, 12, 14, 16, 18) –

Powiązane problemy