2012-02-21 226 views
7

我從來沒有想到我會問這樣一個簡單的問題,但我怎麼在斯卡拉更新數組元素斯卡拉更新數組元素

我宣佈我的主要對象內部內部函數,我有這樣的事情

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

,但我總是得到一個例外,有人能解釋我爲什麼和如何我可以解決這個問題?

+0

什麼讓我困惑了一下時,被認爲是不可變的這麼一個會認爲更新數組元素是不可能的(例如像在斯卡拉鞍數組和其他集合在Scala是一些次),但它實際上意味着一旦創建爲尺寸不能改變,但其內容是...... – 2017-02-17 09:28:25

+0

許多集合在Scala中是不可變的,但數組只是Java數組,而且它們是可變的。 – 2017-09-27 01:58:43

回答

11

你能在缺少填寫詳細信息?例如,評論的地方是什麼?什麼是例外? (它總是最好問一個問題有一個完整的代碼示例,並要清楚是什麼問題

這裏的陣列結構和更新的例子:

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) 

也許你正在假設num代表數組的大小?實際上,它只是數組中的(唯一)元素。也許你想是這樣的:

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

是的,我認爲NUM表示一個數組的大小,由於 – user1224307 2012-02-21 21:05:59

+1

@ user1224307如果你使用'new'關鍵字它僅表示大小。 '陣列(1,2,3)'是隻是元素的數組1,2和3 – 2012-02-22 00:11:52

+2

值得指出的是可以用Array.tabulate初始化數組,以便例如Array.tabulate(10)(身份)給出Array [Int](0,1,2,3,4,5,6,7,8,9)和Array.tabulate(10)(_ * 2)給出Array [Int](0,2,4,6 ,8,10,12,14,16,18) – 2012-02-22 04:14:37