2014-09-23 87 views
-1

有人可以幫我理解爲什麼下面的代碼導致上述錯誤?斯卡拉錯誤:';'預計但'='發現

該代碼用於將二維數組旋轉90度。

def rotate90(block: Array[Array[Int]]) = { 
    var size: Int = block.size 
    var i: Int = 0 
    var j: Int = size - 1 
    while (j >= 0) { 
    while (i <= j) { 
     val a = block[j][i] 
     val b = block[j - i][j] 
     block[j][i] = b 
     block[j - i][j] = a 
     i = i + 1 
    } 
    j = j - 1 
    } 
    return block 
} 
+1

歡迎來到StackOverflow。你能告訴我們錯誤發生在哪裏嗎?沒有這些信息,我們將很難幫助你。 – 2014-09-23 07:44:45

+4

數組訪問符號(和一般集合)在scala中是'()',所以'block [j] [i]'應該是'block(j)(i)',依此類推。 – 2014-09-23 07:50:34

+0

Akso'val a:Array [Array [Int]] = block [j] [i]'? 'a'是一個Int(至少,'block(j)(i)'是一個Int)。你的代碼似乎相當困惑。在任何情況下,您都可以刪除'a'和'b'的顯式類型,編譯器會解決這個問題。 – 2014-09-23 09:34:31

回答

1
def rotate90(block: Array[Array[Int]]) = { 
    val copy: Array[Array[Int]] = Array.ofDim[Int](block.length, block(0).length) 

    for (w <- 0 until block(0).length; 
     h <- 0 until block.length) { 
      copy(h).update(w, block(block(0).length - 1 - w)(h)) 
    } 
    copy 
} 

以上是對你問題的斯卡拉解決方案。也許你更好理解scala中的數組是如何工作的。