2017-12-06 8 views
0
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 {文句:スカラーの2次元配列の要素に一致式の値を割り当てる方法は?

Line 5: error: too many arguments for method update: (i: Int, x: Array[Boolean])Unit

それは意味ありませんか?私は、一致表現の値を2次元配列に代入するだけですが、何が起こりますか?

+3

ヨのような何かを行うことができ、内側の配列にアクセスここで間違っていることがたくさんあります。私は3つだけ言及します。 'f(i)(j)' 2nd - あなたのメソッドは 'String'を返すが、返す文字列を作成したりアクセスしたりすることはありません。 3rd - 'case j'は同じ名前の新しい変数を作成し、他の' j'を隠し、_always_は 'true'を返します。 – jwvh

答えて

1

を使用する必要があり、あなたが経験しているエラーは、2次元配列にアクセスするには、右の構文を使用していないという事実によるものです。文脈にそれを置くために

、配列内の任意のn番目の要素にアクセスするための構文は

array(n) 

であり、あなたが考えてみれば、2次元配列はにことを意味し、配列の配列だけですあなたは

val inner = nested(n) 
inner(m) 

またはショート

nested(n)(m) 
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 
関連する問題