2012-02-21 10 views
7

は、私はこのような単純な質問をされるだろうが、どのように私は私が私のメインオブジェクト内の内側の関数を宣言したScalaの更新配列要素

Scalaで配列要素を更新し、私はこの

object Main 
{ 
    def main(args: Array[String]) 
    { 
     def miniFunc(num: Int) 
     { 
      val myArray = Array[Double](num) 
      for(i <- /* something*/) 
       myArray(i) = //something 
     } 
    } 
} 
のようなものを持っていないと思ったことはありません

私はいつも例外を受け取ります。なぜ誰かが私に説明して、どうすればこの問題を解決できますか?

+0

スカラ座での配列と他のコレクションが不変であると言われているとき、私は少し混乱何い​​くつかの時間はとても1は、配列要素を更新することはできませんことを前提としていますされ(Scalaのハメでの例のように:たぶん、あなたはこのような何かをしたかったです)しかし、実際には、次元を変更することはできませんが、コンテンツは変更できません。 –

+0

多くのコレクションはScalaでは不変ですが、配列は単なるJava配列であり、変更可能です。 –

答えて

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

+1

@ user1224307 'new'キーワードを使用した場合にのみサイズを表します。 'Array(1,2,3)'は1,2,3の要素を持つ配列に過ぎません。 –

+2

Array.tabulateで配列を初期化することができると指摘しています。例えばArray.tabulate(10)(identity)配列[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) –

関連する問題