0

下面是我尝试使用尾递归编写的一个简单的“重复”方法。此函数的唯一目的是仅将给定字符串背靠背重复 'n' 次。

即重复("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

我认为你让这有点太复杂了。一方面,您根本不需要模式匹配,您有一个计数变量,可以告诉您重复字符串的次数,使用它可以大大简化您的代码。此外,倒计时而不是倒计时通常更直接:

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 回答