0

以下は、末尾再帰を使用して記述しようとしている単純な「繰り返し」メソッドです。この関数の唯一の目的は、与えられた文字列を連続して 'n' 回繰り返すことです。

つまり、repeat("Hello",3) = "HelloHelloHello"

しかし、何らかの理由で「java.lang.UnsupportedOperationException」が発生し、その理由がわかりません。

PS これは宿題なので、率直な答えではなく、正しい方向を指し示すことができれば最高です!

  def repeat(s: String, n: Int): String = {
    def tailRepeat(str: String, x: Int): String = x match {
      case `n` => str
      case _ =>  val repeatString = s + str
      tailRepeat(repeatString, (x + 1))
    }
    tailRepeat(s, 0)
  }
4

1 に答える 1

3

これを少し複雑にしすぎていると思います。パターン マッチングがまったく必要ないことの 1 つは、文字列を何回繰り返すかを示すカウント変数があることです。これを使用すると、コードが大幅に簡素化されます。また、通常は、カウントダウンしてカウントアップしない方が簡単です。

def repeat(s: String, n: Int): String = {
    def tailRepeat(str: String, x: Int): String = {
        if(x == 0) str
        else       tailRepeat(str + s, x - 1)
    }
    tailRepeat(s, n - 1)
}

println( repeat("hello", 3) );
// hellohellohello
于 2013-10-11T00:52:21.673 に答える