如何将匹配表达式的值赋给scala中的2-dim数组元素?

时间:2017-12-06 07:33:13

标签: scala

def longestPalindrome(s: String): String = {
    val f = Array.ofDim[Boolean](1001,1001);
    var len = s.length();
    for (i<-0 to len-1; j<-i to len-1) {
        f(i,j) = i match {
            case j => true ;
            case x if x==j-1 => if (s(i) == s(j)) true else false;
            case y if y<j-1 => if (s(i) == s(j)) f(i+1,j-1) else false;
        }
    }
}

抱怨此行f(i,j) = i match {

  

第5行:错误:方法更新的参数太多:(i:Int,x:Array [Boolean])Unit

这意味着什么?我只是将匹配表达式的值赋给2-dim数组,会发生什么错误?

2 个答案:

答案 0 :(得分:3)

您的问题是您尝试使用f(i,j)访问数组的元素。

你应该使用f(i)(j)

scala> val f = Array.ofDim[Boolean](1001,1001);
    f: Array[Array[Boolean]] = Array(Array(false, false, false, false....
scala> f(1,1)
<console>:13: error: too many arguments for method apply: (i: Int)Array[Boolean] in class Array
     f(1,1)
       ^

scala> f(1)(1)
res1: Boolean = false

答案 1 :(得分:1)

您遇到的错误是由于您没有使用正确的语法来访问2D数组。

要将其置于上下文中,访问数组中任意n元素的语法是

array(n)

如果您考虑一下,2D数组只是一个数组数组,这意味着要访问内部数组,您可以执行类似

的操作
val inner = nested(n)
inner(m)

或简而言之

nested(n)(m)