2012-02-21 144 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