下面是我尝试使用尾递归编写的简单'重复'方法。这个函数的唯一目的是只重复给出字符串'n'次。
即。 repeat(“Hello”,3)=“HelloHelloHello”
但无论出于何种原因我得到'java.lang.UnsupportedOperationException',我不知道为什么。
P.S。这是一个家庭作业,所以如果我可以指向正确的方向,而不是一个很酷的直接答案!
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)
}
答案 0 :(得分: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